-
Uma técnica de depuração padrão é inserir o comando
echo
em 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=…"
informafor
como 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
%~na
está obtendo apenas o nome do arquivo dos arquivos*.avi
cujos 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 1
efile 2
emFolder A
, e os diretóriosfile 3
efile 4
emFolder B
. E, como aponta @ dave_thompson_085, você pode combinar%~pa%~na
em%~pna
.