您的原始脚本逐行执行以下操作:
@echo on
告诉命令提示符在执行命令之前先打印批处理文件中的每个命令。这样做是为了让您可以在执行之前“查看”它的实际功能。
cd "C:\Users\MVD21\Desktop\test"
ç hanges ð irectory成什么样,我希望是你要压缩的所有文件的路径。
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
IN
此处的参数是(C:\Users\MVD21\Desktop\test)
。这将导致循环“ body”(关键字后面的动作DO
)仅执行一次,并为%i
参数分配了value C:\Users\MVD21\Desktop\test
。这样做并不符合您的要求也就不足为奇了!看起来这会将整个目录压缩为单个.7z文件。
如果它什么都不做,可能是因为找不到的路径7z.exe
。如果该文件不在当前目录(上述test
目录)中,则它必须位于PATH
(在%PATH%
环境变量中;尝试echo %PATH%
在shell中查看其当前设置)。否则,您必须复制7z.exe
到当前目录或指定其所在位置的绝对路径(例如"C:\Program Files\7-zip\7z.exe" ...
)。
pause
脚本完成后,此关键字仅告诉外壳程序等待您按Enter或关闭命令提示符,而不是立即退出。
在构建批处理脚本(或者实际上是任何其他与代码有关的代码)时,您应该停止将整个脚本视为您不(试图)理解的整体复制粘贴,而分解您的将问题分解为多个子部分,您可以分别找出它们,然后将它们连接在一起。这将使您能够独立解决问题并创建解决方案,而不必要求别人为您完成所有工作。我强烈推荐它。
就您而言,您有以下问题的子组件:
- 遍历(循环遍历)给定目录中包含的每个文件。
- 对于每个给定文件,通过调用
7z
实用程序将其放入.7z文件中。
有人已经解决了您的特定需求的机会比能够单独找到更通用的物品的机会要少。
这个问题“如何对批处理脚本中目录中的每个文件进行处理”解决了一半的问题。
答案的重点是,您只是从StackOverflow答案的这一部分开始:
for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f
并改变在那里的部分做一些事情(的echo %%f
)做你想做的事。我知道您需要更改该部分,因为我已经分析了脚本的文本并理解了每个字符和参数的含义,因此我可以推断出要在哪里插入自己的代码。
这是一些“空中代码”(未经测试!):
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"
上面的@echo on
and pause
语句是一种好习惯,因此您可以将其保留cd
。如果文件位于该路径中,则可能也希望保留该语句。
那给我们留下了什么呢?
@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause
如果您回答“它不起作用!”,我将无济于事。如果您尝试这样做,但它不起作用,则必须在评论中告诉我以下信息:
- 当您运行这些命令或将它们放入批处理文件中并运行它们时,您在命令提示符中得到什么确切的错误消息?不要缩写;直接复制并粘贴输出(如果数量很多,请将其放在http://pastebin.com上)。
- 您认为错误消息告诉您问题是什么?
- 您的7-zip安装位于何处(文件路径)?
PATH
环境变量的内容中是否包含7-zip安装的文件位置?(如上所述,请echo %PATH%
在cmd
提示下进行检查。)