1

Я пытался сделать сценарий, который будет имя файла и изменить только одно слово в нем.

Примером может быть:

projectname.vcproj.domainname.username.user

в

projectname.vcproj.otherdomainname.username.user

Я попытался использовать цикл if, чтобы вывести список каталога и установить разделитель на точку, но, похоже, он не может определить и изменить его. Я использую примеры переименования файлов .txt, но это не работает, какие-либо предложения?

2 ответа2

1

Вы хотите использовать подстановку строки 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

Вы можете получить больше идей, ища в Интернете "манипулирование строками DOS" и "цикл DOS".

http://www.dostips.com/DtTipsStringManipulation.php#Snippets.Replace

0

Я не уверен, что вы хотите, чтобы командный файл:

  1. Переименовать 1 конкретный файл
  2. Переименовать все файлы в каталоге
  3. Переименование файлов в каталоге, которые соответствуют определенному шаблону
  4. Что-то другое ?

Вот пример пакетного файла, который нужно сделать как в # 3 (Переименовать файлы в каталоге, которые соответствуют определенному шаблону).

Запустите пакетный файл, чтобы убедиться, что в нем перечислены все файлы, которые вы хотите переименовать. Первоначально старые и новые имена файлов будут отображаться для всех найденных файлов, но никакие файлы не будут переименованы. Возможно, вам придется изменить значение searchpattern для отображения файлов, которые вы хотите. Как только у вас есть правильные файлы в списке, следуйте инструкциям ниже командного файла, чтобы сделать переименование активным.

@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

Примечание. Чтобы предотвратить переименование неправильных файлов или неправильное переименование файлов, пакетный файл будет отображать старые и новые имена файлов для всех найденных файлов, но файлы не будут переименованы.

После того, как вы запустите пакетный файл и убедитесь, что правильные файлы будут правильно переименованы, вы можете отредактировать файл, чтобы удалить описанные строки, чтобы сделать переименование активным, а затем снова запустить пакетный файл.

Для этого найдите две строки, которые выглядят так:

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

Затем удалите строку с надписью «goto:EOF» (или удалите обе строки).

Не удаляйте «goto:EOF» из любого другого места в командном файле (его можно найти в нескольких местах, поэтому обязательно удалите правильный).

Если вам нужен какой-либо из этих командных файлов, которые вам объяснили, или если он не выполняет то, что вы действительно хотите, пожалуйста, дайте мне знать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .