Мне нужно найти указанный файл, 123.txt, во всех моих подкаталогах, а затем добавить имя конкретного подкаталога в этот файл. И даже заставить файл bat перезаписывать существующий файл при каждом запуске. Например:-folder --subfolder1 --- 123.txt --subfolder2 --- 123.txt Чтобы подвести итог, указанный файл 123.txt находится во многих подкаталогах. Я хотел бы, чтобы все файлы 123.txt переименовывались в НОВЫЕ файлы (каждый раз перезаписывались) с добавленными в них именами папок (разделенными тире). Поэтому мне нужны такие файлы, как --subfolder1 --- subfolder1-123.txt --subfolder2 --- subfolder2-123.txt Пожалуйста, помогите. Пакетный файл делает это, пожалуйста.
2 ответа
Вероятно, я бы сделал что-то вроде этого: рекурсивно зациклите все папки, проверьте, существует ли файл с именем 123.txt, и если да, переименуйте его. Обратите внимание, что ~n
возвращает часть имени каталога, содержащуюся в переменной %%d
.
Сохраните следующее в файл с расширением .bat
и запустите его из каталога, в котором находятся ваши 123 файла.
@echo off
for /r /d %%d in (*.*) do (
if exist "%%d\123.txt" (
rename "%%d\123.txt" "%%~nd-123.txt"
)
)
Или как отдельный пользователь, запускаемый из командной строки напрямую (обратите внимание на одиночные символы %
):
for /r /d %d in (*.*) do (if exist "%d\123.txt" rename "%d\123.txt" "%~nd-123.txt")
Справку по большинству из вышеперечисленных можно прочитать, набрав for /?
в командной строке.
Вот альтернатива PowerShell:
gci C:\somewhere -r -filter 123.txt | % { rni $_.FullName -NewName ( "$( split-path (split-path $_.FullName -parent) -leaf )-123.txt" ) }
Вы можете изменить путь в gci
к вашему верхнему каталогу, и он будет искать 123.txt в каждой подпапке и переименовывать его в parentfolder-123.txt
запустите это из окна PowerShell