Script em lote para renomear a parte de um nome de arquivo

1

Estou tentando criar um script que tenha um nome de arquivo e altere apenas uma palavra nele.

Um exemplo seria:

projectname.vcproj.domainname.username.user

para

projectname.vcproj.otherdomainname.username.user

Eu tentei usar o loop if para listar o diretório e definir o delimitador para um período, mas ele não parece ser capaz de identificá-lo e alterá-lo. Estou usando exemplos de renomeação de arquivos .txt, mas não parece funcionar, alguma sugestão?

    
por Rubik'sCube 16.11.2012 / 04:19

2 respostas

1

Você deseja usar a substituição de strings do DOS.

C:\>set proj=projectname.vcproj.domainname.username.user
C:\>echo %proj%
projectname.vcproj.domainname.username.user

C:\>set proj=%proj:domainname=otherdomainname%
C:\>echo %proj%
projectname.vcproj.otherdomainname.username.user

Você pode obter mais ideias pesquisando as interwebs para "manipulação de strings DOS" e "DOS para loop".

link

    
por 16.11.2012 / 06:00
0

Não tenho certeza se você deseja um arquivo em lotes para:

  1. Renomear 1 arquivo específico
  2. Renomeie todos os arquivos em um diretório
  3. Renomeie arquivos em um diretório que corresponda a um padrão específico
  4. Algo mais?

Aqui está um exemplo de um arquivo em lote para fazer como em # 3 (Renomear arquivos em um diretório que corresponda a um padrão específico).

Execute o arquivo em lote para certificar-se de que ele lista todos os arquivos que você deseja que sejam renomeados. Inicialmente, os antigos e novos nomes de arquivos serão exibidos para todos os arquivos encontrados, mas nenhum arquivo será renomeado. Você pode ter que modificar o valor de searchpattern para exibir os arquivos desejados. Depois de ter os arquivos corretos listados, prossiga com as instruções abaixo do arquivo em lotes para tornar a renomeação ativa.

@echo off

set "searchfor=domainname"
set "replacewith=otherdomainname"
set "searchpattern=*.%searchfor%.*"

for %%f in ("%searchpattern%") do call :work "%%~f"
set "searchfor="
set "replacewith="
set "searchpattern="
set "filematched="
set "filenewname="
goto :EOF


:work
set filematched=%~1

rem You can't do it directly like:
rem set "filenewname=%filematched:%searchfor%=%replacewith%%"

for /F "usebackq delims=" %%g in ('echo set "filenewname=%%filematched:%searchfor%=%replacewith%%%"') do %%g
echo Renaming "%filematched%" to "%filenewname%"



rem delete the next line (goto :EOF) to make renaming active
goto :EOF



rem this line actually does the file renaming
ren "%filematched%" "%filenewname%"

goto :EOF

Observação: Para impedir que os arquivos errados sejam renomeados ou os arquivos sejam renomeados de maneira incorreta, o arquivo em lote exibirá os nomes antigos e novos de todos os arquivos encontrados, mas nenhum arquivo será renomeado.

Depois de executar o arquivo em lotes e ter certeza de que os arquivos corretos serão renomeados corretamente, edite o arquivo para remover a (s) linha (s) descrita (s) para tornar a renomeação ativa e execute o arquivo em lotes novamente.

Para fazer isso, encontre as duas linhas que são assim:

rem delete the next line (goto :EOF) to make renaming active
goto :EOF

Em seguida, remova a linha que diz "goto: EOF" (ou remova as duas linhas).

Não remova "goto: EOF" de qualquer outro lugar no arquivo de lote (ele pode ser encontrado em alguns lugares, portanto, certifique-se de remover o correto).

Se você precisar de algum desses arquivos de lote explicados para você, ou se não estiver fazendo o que você realmente quer, por favor me avise.

    
por 16.11.2012 / 11:22