Pendant des années, tous mes films ont toujours été placés dans un même dossier, avec tous leurs extras . Je réalise maintenant qu'après plusieurs frustrations, conserver une copie de sauvegarde de nfo et d'art m'épargnerait des heures de vie et base de données plus utilisable lors de l’ajout d’une nouvelle configuration Kodi (TV, tablette, ordinateur portable, etc ...) . Je tente donc de créer par lots un dossier basé sur le nom du fichier du film et de déplacer plusieurs fichiers liés vers le même fichier. dossier créé.
Pour être clair, je veux créer un nom de dossier pour le film et que tous les fichiers associés soient placés dans ce dossier. Le format des noms de fichiers de film peut changer car ils n’ont pas tous la même information, c’est-à-dire l’édition finale, l’édition ultime, de Director, qui sont en brakets []. Le nom principal du film serait dans tous les cas le nom de fichier le plus petit, et je ne voudrais jamais que le dossier soit nommé avec un fichier contenant "[Extra]" dans le nom du fichier . En règle générale, le format est "Film (année)". ) [extra info] ... [extra info] petite description ici "pour les vidéos non-film.
Le meilleur que j'ai trouvé est:
for %%i in (*) do md "%%~ni" && move "%%~i" "%%~ni"
Le problème actuel est que je crée un dossier pour chaque fichier et que je déplace tous les fichiers dans les dossiers respectifs, mais le contenu associé se trouve maintenant dans différents dossiers et les objets portant exactement le même nom de fichier sont laissés dans le dossier principal.
Un exemple de ce que j'essaie d'accomplir:
À:
Quelqu'un peut-il m'aider avec ce code de lot? Tous les noms de fichiers ne sont pas Movie (Year) [Comm] ..., certains ne sont que Movie ou Movie [Comm].
En résumé: je veux créer un dossier basé sur un film, c’est-à-dire tout fichier avec une extension vidéo spécifique, tel que mp4, mkv, avi, etc ... qui ne contient pas non plus: [Extra]; puis déplacez tous les fichiers associés dans ce dossier.
J'ai parcouru ces sources:
Bien que votre description soit ample, vous avez oublié de donner quelques détails spécifiques; Par exemple: démarre tous les noms de fichiers avec la partie "Film (année)"? Si oui, alors ce fichier batch fait ce que vous voulez:
EDIT: Ops, j'ai mal interprété les exigences! Cette version fonctionne correctement:
@echo off
setlocal
set "basename=."
for /F "tokens=1* delims=." %%a in ('dir /B /A-D ^| sort /R') do (
set "filename=%%a"
setlocal EnableDelayedExpansion
for /F "delims=" %%c in ("!basename!") do if "!filename:%%c=!" equ "!filename!" (
set "basename=!filename!"
md "!basename!"
)
move "!filename!.%%b" "!basename!"
for /F "delims=" %%c in ("!basename!") do (
endlocal
set "basename=%%c
)
)
Il suffit de sauvegarder le code ci-dessous avec l’extension .Bat dans l’emplacement réel de la source.
@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
pause
Ce n'est pas facile à faire, car il faudrait trier les noms de fichiers. Vous pouvez spécifier un ordre de tri en utilisant dir
, mais les noms les plus courts ne seront pas les premiers. Par exemple, foo.wmv
est alphabétiquement derrière foo subtitles.srt
, car l'espace vient avant le point.
Donc, pour contourner le problème, vous pourriez peut-être avoir une liste des «extensions connues» contenant les noms de base des films, puis déplacer tous les fichiers qui partagent le nom de base avec eux. C'est ce que fait le script suivant. Il répertorie tous les fichiers avec les extensions avi
, mp4
et mkv
, mais vous devrez peut-être commencer par nfo
, qui est disponible pour de nombreux films. Le script utilise les noms de fichiers de ces fichiers pour créer des répertoires et rechercher les fichiers associés. cela semble faire l'affaire, mais faites une sauvegarde avant de l'utiliser. :)
L'hypothèse de ce script est que le fichier avec l'extension connue porte également le nom le plus court. Si d’autres fichiers portent des noms plus courts (ou ne correspondent pas), ils ne seront pas déplacés vers ce dossier.
Le script n'est pas parfait. Le plus gros inconvénient est que si un film contient plusieurs fichiers mp4, il créera un dossier pour chacun d'entre eux. Mais si vous faites quelques itérations, en utilisant chaque fois différentes extensions dans un ordre spécifique (commencez par nfo
et d’autres extensions similaires, puis déplacez les extensions binaires du film, etc.), vous pourrez peut-être faire au moins most du travail automatiquement.
@echo off
setlocal
REM store current directory. Using separate variable makes it
REM easier to change behaviour too.
set dir=%cd%
REM call subroutine for each supported extension.
call :do .info
call :do .mp4
call :do .avi
call :do .mkv
REM Main program done.
echo Press a key to close.
pause
exit /b
:do
set ext=%1
REM loop through all files with the given extension.
for /f "tokens=*" %%f in ('dir /b /on "%dir%\*%ext%"') do (
REM trim the extension and use the base name as directory name.
setlocal EnableDelayedExpansion
set thefile=%%~nf
echo !thefile!
md "%dir%\!thefile!"
REM move all files that start with the same base name.
move "%dir%\!thefile!*.*" "%dir%\!thefile!\"
)
REM exit subroutine
exit /b
Je pense que cela fonctionnera, mais essayez d’abord un dossier de test:
@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
cd ..
del %%~na
pause
edit: J'ai changé le code, la syntaxe mixte de batch et bash.