-
Uma técnica de depuração padrão é inserir o comando
echoem scripts e até comandos compostos / complexos. Se você fizerfor /f "delims=*" %a in ('dir *.avi /b /s') do @echo md "%~na"você receberá a saída
"file 1" "file 2" "file 3" "file 4"Notas:
- O
@impede a exibição dos comandosecho, então você vê apenas sua saída. -
"delims=…"informaforcomo analisar as linhas de saída do comandodir *.avi /b /s. Não sei por que a resposta à qual você vinculou sugere"delims=*". Mas o comportamento padrão é separar as linhas nos espaços, então, se o seu diretório e / ou nomes de arquivos contiverem espaços (como você indicou), você deve usar"delims="(especificando que não há delimitadores) para que isso funcione.
- O
-
Se você digitar
for /?ouhelp for, você obterá documentação sobre o comandofor. Abaixo na quinta página, você veráIn addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax: %~I - expands %I removing any surrounding quotes (") ︙ %~pI - expands %I to a path only %~nI - expands %I to a file name only ︙ The modifiers can be combined to get compound results … ︙que explica por que
%~naestá obtendo apenas o nome do arquivo dos arquivos*.avicujos nomes completos estão em%a. Agora tentefor /f "delims=" %a in ('dir *.avi /b /s') do @echo md "%~pa"e você receberá
"the_current_directory\Folder A\" "the_current_directory\Folder A\" "the_current_directory\Folder B\" "the_current_directory\Folder B\"
A partir do qual podemos concluir que você quer fazer
for /f "delims=" %a in ('dir *.avi /b /s') do md "%~pa%~na"para criar os diretórios
file 1efile 2emFolder A, e os diretóriosfile 3efile 4emFolder B. E, como aponta @ dave_thompson_085, você pode combinar%~pa%~naem%~pna.