Ceci ici script de lots crée une liste de fichiers de %folder%
utilisant %wildcards%
, crée ensuite un répertoire en miroir sur le lecteur c:
contenant une version txt de chaque fichier comme every file.mkv.txt
, qui contiennent des données des fichiers d'origine comme path-to-file/duration/size
.
setLocal enableDelayedExpansion
:: adder fails with filenames with ampersand "&". investigate
for /f "delims=" %%v in ('dir "%folder%\%wildcards%" /b /s /a-d 2^>nul') do (
if not exist "c:%%~pv" mkdir "c:%%~pv"
if not exist "c:%%~pnxv.txt" for /f "usebackq tokens=2 delims=," %%i in ('"%ffprobe%" -v quiet -show_entries "format=duration" -of csv "%%v"') do (
rem record path-to-file/duration/size into mirror files
echo %%v/%%i/%%~zv>"c:%%~pnxv.txt"
)
)
Succède à certains fichiers et échoue avec d'autres, je pense que cela a quelque chose à voir avec les virgules ,
Dans la partie où ffprobe
est exécuté au fichier %%v
. On dirait que je dois utiliser des virgules comme délimiteur car la durée est formatée comme format,94.436000
. Cela a cessé de fonctionner depuis que j'ai commencé à avoir besoin de citations pour le %ffprobe%
variable (où le chemin de FFProbe.exe est).
Je pense que cela a quelque chose à voir avec les virgules (,
) Dans la partie où FFProbe est exécuté au fichier %% v .:
:: adder fails with filenames with ampersand "&". investigate`
Essayez juste ajouter 2>&1
Dans ffprob
commande.
également remplacer echo string,with &, and commas
À:
[.____] echo+ & <nul set /p .="Str,ing,s with & and com,mas" >>file
for /f tokens^=* %%v in ('dir "%folder%\%wildcards%" /b /s /a-d 2^>nul')do 2>nul mkdir "c:%%~pv" & if not exist "c:%%~pnxv.txt" (
for /f usebackq^tokens^=1*delims^=^, %%i in (`2^>^&1 "%ffprobe%" -v quiet -show_entries "format=duration" -of csv "%%v"`)do (
echo+ & <nul set /p .="%%v/%%j/%%~zv">>"c:%%~pnxv.txt"))
OBS. :=== À propos de la même chose: 2>nul mkdir folder
Vs if not exist folder (create)do not do(ignore)
...
En utilisant mkdir folder
, Vous pouvez créer un dossier si cela n'existe pas dans une action, dans un déjà existant/ne le crée pas, il renvoie simplement un avertissement/message informant l'existence, ce n'est pas un effondrement/désastre .
Il s'agit d'une action sans impact efficace pour la fonction de boucle/batte ne nécessitant qu'une commande avec un traitement prédictif dû à une non-exécution éventuelle où il n'est pas nécessaire [ run (if folder exists warning) omit ] and continue
..., qui est parfaitement amende résultant de omettre l'erreur/avertissement avec 2>nul mkdir Folder_If_Or_Not_Exist & continue