Como adicionar um prefixo a todas as pastas e subpastas? (janelas)

1

re: Como adicionar um prefixo a todos os arquivos e pastas em uma pasta? (janelas)

Estou tentando criar um arquivo .bat que renomeie uma estrutura de pastas predefinida com um prefixo de número do projeto, por exemplo. nome do projeto / admin - torna-se - 7000-01 nome do projeto / 7000-01 admin. Aqui está o que eu tenho até agora:

@Echo off
pushd
for /d %%g in (*) do ren "%%g" "7000-01 %%g"

Que funciona apenas para o nível superior, mas eu gostaria que ele renomeiasse todas as subpastas (incluindo aquelas abaixo do nível 'admin', por exemplo, acima.)

Eu li aqui - https://ss64.com/nt/for_d.html que o uso for /d /rdeve funcionar para renomear recursivamente todas as subpastas, mas não consigo fazê-lo funcionar.

Para sua informação, pushdé usado para que o nome .bat permaneça o mesmo.

Vai
fonte

Respostas:

0

Você estava tão perto! O comando correto é:

for /r /d %%g in (*) do ren "%%g" "7000-01 %%~ng"

Explicação completa:

Como você mencionou, você deve usar for /d /rpara trabalhar recursivamente. ( https://ss64.com/nt/for_d.html )

A verificação da sintaxe do comando renou renamerevela que é necessária uma sintaxe muito específica:

>ren /?
Renames a file or files.

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

Note that you cannot specify a new drive or path for your destination file.

Seu comando original dentro do loop for estava sendo avaliado ren "FULL_PATH" "FULL_PATH"e, na verdade, deveria serren "FULL_PATH" "SIMPLE_FILE_NAME"

Para obter o nome do arquivo sem extensão ou caminho, use ~ncom a variável ( https://ss64.com/nt/syntax-args.html )

JonathanDavidArndt
fonte
Obrigado, isso funcionou perfeitamente e acho que entendi o porquê, bônus!
Will