这是我的情况。一个项目的目标是将一些附件迁移到另一个系统。
这些附件将位于父文件夹中,假设为“Folder 0”(请参见this question's diagram以更好地理解),并且它们将被压缩/打包。
我希望我的批处理脚本被这样调用:
我想在调用 7za.exe e %zippedFile 进行文件提取之前,也需要更改实际目录,但我无法在此批处理文件中找到方法(尽管我知道如何在命令行中执行,即使我知道它是相同的指令“cd”)。 编辑#1 我已经收到了一些关于
然而,它从根目录(C:)提取,而不是从参数中给出的文件夹中提取。
有人有想法吗? 编辑#2 批处理脚本似乎不能很好地处理包含空格字符的文件夹和文件名。有人可以确认一下我的想法吗? 编辑#3
这些附件将位于父文件夹中,假设为“Folder 0”(请参见this question's diagram以更好地理解),并且它们将被压缩/打包。
我希望我的批处理脚本被这样调用:
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
的提示,与同样的问题有关。请参见this link的答案。然而,它从根目录(C:)提取,而不是从参数中给出的文件夹中提取。
有人有想法吗? 编辑#2 批处理脚本似乎不能很好地处理包含空格字符的文件夹和文件名。有人可以确认一下我的想法吗? 编辑#3
编辑#4.a 使用@aphoria的解决方案,我已经接近成功了!唯一的问题是,它拿到一个名为我需要它完全递归,因为我不知道将使用哪个目录结构。
File5.zip
的文件后,只获取文件名File5
,创建一个子文件夹File5
并将File5.zip
解压到File5
子文件夹中,然后,它想要在Folder 1
中创建一个File5
子文件夹,而实际上应该创建一个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
中有一个Folder A
(Folder 1\Folder A),那么它会从Folder 1
到Folder 5
进行搜索,然后返回到Folder 1\Folder A
,其中%subfolder%变量保持其最后一个值。
非常感谢任何人的帮助。
!
的提示。我已经按照建议阅读了SET /?
,现在我可以理解它的值将在运行时评估,如果我可以这样总结的话。这就是为什么它允许值变化的原因。确实,只有当启用了ENABLEDELAYEDEXPANSION
时才有效。所以对我来说,这是新的功能!我曾经写过一些批处理文件,就在将近20年前的DOS 5.0
时代。呵呵呵...谢谢朋友!=) - Will Marcouiller