2

У меня есть 3 папки, такие как структура ниже. , ,

  • / LOCATION1
    • / subdirLocation1
      • foo-bar1.txt, foo-bar2.txt, foo-bar3.txt
  • / LOCATION2

Папка subdirLocation1 является подкаталогом location1 . Папка location1 также содержит файлы foo-bar1.txt , foo-bar2.txt , foo-bar3.txt . Однако папка location2 пуста.

Перечень структуры папок

  • location1> subdirLocation1, foo-bar1.txt, foo-bar2.txt, foo-bar3.txt
  • subdirLocation1> foo-bar-subdir.txt
  • location2> (Пусто)

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

Мне нужно для решения этой задачи с помощью пакетного сценария Windows?


Вот то, что я придумал изначально, прежде чем добавить дополнительную логику, которую я придумал, используя циклы FOR ниже этого, а также в нижней части моего ответа.

Это, однако, перемещает только файлы .txt из каталога location1 а не из его подкаталога. Также переименование работает только для foo-bar1.txt , foo-bar2.txt , foo-bar3.txt . Это не будет работать для foo-bar-subdir.txt .

MOVE "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location1\*.txt" "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location2"  
RENAME "C:\Users\abcde\Desktop\Practice_Folder\batch rename\location2\*-*" ???_????.txt 

Ниже то, что у меня работает, работает немного лучше, чем выше, но символы дефиса не заменяются символами подчеркивания в именах файлов.

CD "C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n1\" 
for /R %%f in (*-*.txt) do call :copyFile %%f 
goto: eof 

:copyFile 
xcopy %1 "C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n2" 
set file=%~nx1 
rename file %str:-=_%

1 ответ1

0

Я хочу переместить все файлы .txt из location1 и его подкаталогов в location2, а также переименовать эти файлы .txt, заменив каждый "-" на "_".

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

Обязательно протестируйте и подтвердите все работы, как и ожидалось, с помощью тестовых данных, прежде чем приступить к выполнению каких-либо критических или производственных задач.

Пример скрипта

Вам не нужно использовать логику комментария, но она есть на тот случай, если она вам понадобится

@ECHO ON

SET Loc1Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n1
SET Loc2Dir=C:\Users\abcde\Desktop\Practice_Folder\batch_rename\locatio‌​n2

CD /D "%Loc1Dir%" 
FOR /R %%F IN ("*-*.txt") DO CALL :copyFile %%~F %%~NXF
GOTO: EOF 

:copyFile
SET copyfname=%~1
SET fname=%~2 
SET fname=%fname:-=_% 
ECHO F | XCOPY /Y /F "%copyfname%" "%Loc2Dir%\%fname%"
:::XCOPY /Y /F "%copyfname%" "%Loc2Dir%\"
:::REN "%copyfname%" "%fname%"
GOTO :EOF

Разъяснение снимка экрана


Дополнительные ресурсы

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