Windows переименовывает файлы рекурсивно

646
Markus

Я немного застрял здесь, я создал простой файл, чтобы заархивировать папки со специальным именем. Итак, допустим, мы ищем папки с именем «tozip», но имя заархивированного файла должно быть именем подпапки + имя папки. например, все файлы в C: / test / somefolder / 123456 / tozip / * должны быть добавлены в файл "123456_tozip.7z"

что у меня сейчас есть:

for /R /d /r %%i in (tozip*) do ( 7za a -tzip "%%i.7z" "%%i" -mx3 ) 

но это не добавляет имя папки n-1 к имени файла. Я видел, что могу извлечь, например, имя файла по %% ~ nxi или по полному пути, но, к сожалению, не ту информацию, которая мне нужна. Есть идеи по этому поводу?

0
Где находится файл zip (`.7z`): в` tozip \ `или выше в дереве каталогов? AFH 7 лет назад 0
Еще один побочный вопрос: `-tzip` означает, что вы используете методы сжатия zip, а не 7z. Но ваш архив будет иметь расширение `.7z`. Это предназначено? nixda 7 лет назад 0
Странно, что он не выдает ошибку с двумя ключами / R. Squashman 7 лет назад 0
@AFH на одно дерево каталогов выше Markus 7 лет назад 0
@ nixda спасибо, это не так важно, но спасибо, что упомянули об этом! Markus 7 лет назад 0
@Squasman скопировать ошибку вставки, извините! ;-) Markus 7 лет назад 0

1 ответ на вопрос

1
Squashman

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

Вот код, основанный на вашем примере.

@echo off for /D /R C:\test\ %%G in (tozip*) do ( FOR %%H IN ("%%G\..") DO echo %%~nxH  ) pause 
ой, это больно ... Я не знал, что это так просто, спасибо за вашу помощь! Markus 7 лет назад 0
Я пытался разобраться, как разобрать последний элемент пути к каталогу: добавление `\ ..` - гораздо более точное решение! AFH 7 лет назад 0