У меня есть 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\location1\"
for /R %%f in (*-*.txt) do call :copyFile %%f
goto: eof
:copyFile
xcopy %1 "C:\Users\abcde\Desktop\Practice_Folder\batch_rename\location2"
set file=%~nx1
rename file %str:-=_%