2017-02-06 5 views
0

У меня есть .txt-файл, который содержит очень длинный сгенерированный список папок третьего уровня, для которых я хочу закрепить содержимое каждого из них. Так упрощенный пример, это было бы содержание list.txtКак поместить список вложенных папок из текстового файла и указать имя родительской папки в имени файла?

F:\Folder\2005-05-11\[ABC#1] FolderA 
F:\Folder\2005-05-11\[ABC#2] FolderB 
F:\Folder\2005-05-26\[ABC#1] FolderA 

Если я сделаю это

for /F "delims=" %%X in (list.txt) do "7z.exe" a -mx=0 "%%X.zip" "%%X\*" 

Имя файла каждого почтового индекса только последний каталог, который архивируются. Итак, [ABC# 1] FolderA.zip и так далее. Все эти молнии будут позже перенесены из этого контекста, и поэтому мне нужно будет более четко их называть.

В абсолютно идеальном мире я бы хотел, чтобы они взяли имя второго уровня (дату) и только часть в квадратных скобках из последней папки (которая всегда согласована). Итак, 2015-05-11 [ABC# 1] .zip, но я не знаю, если это возможно.

Вероятно, более простой вариант заключается в том, что он включает только родительский каталог на zip, поэтому 2005-05-11 [ABC# 1] FolderA.zip, как я мог это сделать?

Очевидно, что я использую 7zip в своем текущем скрипте, но если это проще с WinRAR или другим инструментом, это нормально.

ответ

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "filename1=%sourcedir%\q42060809.txt" 
for /F "usebackqdelims=" %%X in ("%filename1%") do (
FOR /f %%d IN ("%%~dpX.") DO (
    FOR /f "delims=[]" %%b IN ("%%~nX") DO (
    ECHO("7z.exe" a -mx=0 "%%~dpX%%~nxd[%%b].zip" "%%X\*" 
) 
) 
) 

GOTO :EOF 

Вы должны были бы изменить установку sourcedir в соответствии с вашими обстоятельствами.

Я использовал файл с именем q42060809.txt, содержащий ваши данные для моего тестирования.

Необходимые команды - это всего лишь ECHO ed для целей тестирования. После того, как вы подтвердили правильность команд, удалите ECHO(, чтобы фактически заархивировать файлы.

Естественно, вам не нужно usebackq, если вы не «цитировать имя файла»

Шаг 2 - добавление . к ~dp дате и пути частями %%X. Результатом в %%~nxd является N ame и e X напряжение самого низкого уровня справочника.

Затем, с (АМЕ N) часть только из %%X~n, tokenise его с помощью кронштейнов, как разделители, поэтому часть между скобками появится в %%b

Затем смешивать и сочетать соответствующие элементы. Вставьте кронштейны в случае необходимости и добавьте пространство перед открытой скобкой, если это подходит вашему воображению ...

Смежные вопросы