-1

Мне нужно найти указанный файл, 123.txt, во всех моих подкаталогах, а затем добавить имя конкретного подкаталога в этот файл. И даже заставить файл bat перезаписывать существующий файл при каждом запуске. Например:-folder --subfolder1 --- 123.txt --subfolder2 --- 123.txt Чтобы подвести итог, указанный файл 123.txt находится во многих подкаталогах. Я хотел бы, чтобы все файлы 123.txt переименовывались в НОВЫЕ файлы (каждый раз перезаписывались) с добавленными в них именами папок (разделенными тире). Поэтому мне нужны такие файлы, как --subfolder1 --- subfolder1-123.txt --subfolder2 --- subfolder2-123.txt Пожалуйста, помогите. Пакетный файл делает это, пожалуйста.

2 ответа2

1

Вероятно, я бы сделал что-то вроде этого: рекурсивно зациклите все папки, проверьте, существует ли файл с именем 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 /? в командной строке.

0

Вот альтернатива 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

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