Вот моя ситуация. Цель проекта - перенести некоторые вложения в другую систему.
Эти вложения будут расположены в родительской папке, скажем, "Folder 0
" (см. диаграмму этого вопроса для лучшего понимания), и они будут сжаты / сжаты.
Я хочу, чтобы мой пакетный скрипт назывался так:
BatchScript.bat "c:\temp\usd\Folder 0"
Я использую 7za.exe
в качестве инструмента извлечения командной строки.
Я хочу, чтобы мой пакетный скрипт выполнял итерацию в подпапках "Folder 0
" и извлекал все содержащиеся в нем ZIP-файлы в соответствующие папки.
Обязательно, чтобы извлеченные файлы находились в той же папке, что и соответствующие им ZIP-файлы. Итак, файлы, содержащиеся в «File 1.zip
», необходимы в «Folder 1
» и т. Д.
Я читал о команде FOR...DO
на Windows XP Professional Product Documentation - Using Batch Files
.
Вот мой сценарий:
@ECHO OFF
FOR /D %folder IN (%%rootFolderCmdLnParam) DO
FOR %zippedFile IN (*.zip) DO 7za.exe e %zippedFile
Я полагаю, что мне также нужно изменить фактический каталог перед вызовом 7za.exe e% zippedFile для извлечения файлов, но я не могу понять, как в этом пакетном файле (через я знаю, как в командной строке, и даже если я знаю, это та же инструкция "CD").
РЕДАКТИРОВАТЬ # 1
Я уже получил несколько советов по ServerFault
на тот же вопрос. Пожалуйста, смотрите ответы на эту ссылку .
Однако он извлекается из корня (C :), а не из заданного в папке параметров.
У кого-нибудь есть идея?
РЕДАКТИРОВАТЬ # 2
Кажется, что пакетный скрипт не обрабатывает имена папок и файлов, содержащие символы пробела. Кто-нибудь может подтвердить, что я думаю?
РЕДАКТИРОВАТЬ # 3
Мне нужно, чтобы он был полностью рекурсивным, поскольку я не знаю структуру каталогов, для которой это будет использоваться.
РЕДАКТИРОВАТЬ # 4.a
С решением @ aphoria я почти у цели! Единственная проблема состоит в том, что требуется, скажем, File5.zip
, получить имя файла только для получения File5
, создать подпапку File5
и извлечь подпапку File5.zip
в File5
, затем она хочет создать File5
подпапка в Folder 1
, где вместо этого нужно создать подпапку File1
, чтобы придерживаться моего примера.
РЕДАКТИРОВАТЬ # 4.b
При необходимости, вот код, как он выглядит сейчас:
@echo off
setlocal enableextensions enabledelayedexpansion
rem
rem Display instructions when no parameter is given.
rem
if "%1" equ "" (
echo Syntaxe : od.bat ^<directory mask>^
echo Exemple : od.bat *
goto :Eof
)
rem
rem Setting the PATH environment variable for this batch file for accessing 7za.exe.
rem
path=c:\temp;%PATH%
rem
rem Removing quotes from the given command line parameter path.
rem
set root=%1
set root=%root:~%1
set root=%root:~0,-1%
rem Searching directory structure from root for subfolders and zipfiles, then extracting the zipfiles into a subfolder of the same name as the zipfile.
for /F "delims==" %%d in ('dir /ogne /ad /b /s %root%') do (
echo Traitement du dossier : "%%d"
for /F "delims==" %%f in ('dir /b "%%d\*.zip"') do (
rem Getting filename without extension.
set subfolder=~n%f
mkdir "%%d\%subfolder%"
rem Extracting zipfile content to the newly created folder.
7za.exe e "%%d\%%f" -o"%%d\%subfolder%"
)
)
:Eof
endlocal
Идеи кому-нибудь?
Я предполагаю, что он копает одну иерархию каталогов за раз. Вот сделка. Предположим, у нас есть Folder A
в Folder 1
(Папка 1 \ Папка A), затем он выполняет поиск от Folder 1
до Folder 5
и возвращается к Folder 1\Folder A
, где переменная% subfolder% остается с последним значение.
Любая помощь с благодарностью.