【发布时间】:2010-06-08 17:19:55
【问题描述】:
这是我的情况。一个项目的目标是将一些附件迁移到另一个系统。
这些附件将位于父文件夹中,比如“Folder 0”(请参阅this question's diagram 以更好地理解),它们将被压缩/压缩。
我希望我的批处理脚本被这样调用:
BatchScript.bat "c:\temp\usd\Folder 0"
我使用7za.exe作为命令行提取工具。
我希望我的批处理脚本做的是遍历“Folder 0”的子文件夹,并将所有包含的 ZIP 文件提取到各自的文件夹中。
提取的文件必须与其各自的 ZIP 文件位于同一文件夹中。因此,“Folder 1”中需要“File 1.zip”中包含的文件,依此类推。
我已经阅读了关于Windows XP Professional Product Documentation - Using Batch Files 上的FOR...DO 命令。
这是我的脚本:
@ECHO OFF
FOR /D %folder IN (%%rootFolderCmdLnParam) DO
FOR %zippedFile IN (*.zip) DO 7za.exe e %zippedFile
我想在调用 7za.exe e %zippedFile 进行文件提取之前,我还需要更改实际目录,但我无法弄清楚这个批处理文件的方式(通过我知道命令行中的方式,甚至如果我知道它是相同的指令“cd”)。
编辑#1
我已经收到了一些关于ServerFault 的关于同一问题的提示。请在this link查看答案。
但是,它是从根目录 (C:) 中提取的,而不是从给定的参数文件夹中提取的。
有人有想法吗?
编辑#2
批处理脚本似乎无法充分处理包含空格字符的文件夹和文件名。谁能证实我的想法?
编辑#3
我需要它是完全递归的,因为我不知道将使用它的目录结构。
编辑 #4.a
有了@aphoria 的解决方案,我就快到了!唯一的问题是它需要假设
File5.zip,仅检索文件名以获得File5,创建一个子文件夹File5并将File5.zip提取到File5子文件夹,然后,它想创建一个@987654341Folder 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 1(文件夹 1\文件夹 A)中有一个 Folder A,然后,它从 Folder 1 到 Folder 5 搜索,然后返回到 Folder 1\Folder A,其中 %subfolder% 变量与其最后一个价值。
感谢任何人的帮助。
【问题讨论】:
标签: batch-file dos extract 7zip