1

我有一个批处理脚本,它实际上可以执行我想要的操作(获取多个文件并将它们放在与 .bz2 文件相同的目录中)。不过我需要一些帮助,因为我需要删除原始文件。此外,当输入大小变得太大(不能给出确切的数字,可能在 40 左右)时,批处理会崩溃。我试图自己解决这个问题,不幸的是,批处理对我来说是胡言乱语。如果这可以删除原始文件,我可以处理当前输入大小。任何人都可以给我的任何帮助将不胜感激。这是我当前的代码:

@Echo Off
:Start
If [%1==[ Goto :EOF
PushD %~pd1
"C:\Program Files\7-Zip\7z.exe" u -tbzip2 %~nx1.bz2 %1
Shift
PopD
Goto Start

我还想提一下,我不是这段代码的原作者,它是在论坛上发布的。

4

2 回答 2

1

我会做一个 FOR 循环。

::start batchfile
@echo off
setlocal
::set local variables

set input=C:\input
set 7zip=C:\Program Files\7-Zip

::The reason I would use this forloop is that when you start your loop,
::you can say for each files in a recursive way do the following: 
::IF (test) do (<command1> <command2>)
::The file that is being processed is called %%i during the whole loop (for that file)
::so at the end of your loop you just 'del <file>' your source

for /f %%i in (%input%\*.bz2) do (
%7zip% u -tbzip2 "%input%\%%i" "%%i"
del "%input%\%%i"
)

goto: eof

我不是真正的专家,但我希望这对你有所帮助

于 2011-01-19T19:46:25.400 回答
0

更改调用解压缩实用程序的行,如下所示:

"C:\Program Files\7-Zip\7z.exe" u -tbzip2 %~nx1.bz2 %1 && del %~nx1.bz2

粗体部分表示“如果左边的命令&&成功完成,则删除指定的文件”。因此,如果由于某种原因文件未解压缩或未完全解压缩,则del不会触发并且文件将保留。也就是说,如果你希望它是那样的。

如果 Rps 的解决方案非常适合您,您可能需要相应地更改它。

但在使用之前,del我会首先尝试找出(通过运行,可能,7z.exe /?7z.exe -?)解压缩实用程序是否有一个参数告诉它如果解压缩成功则自动删除存档。这样您就不必手动实现该功能。

于 2011-02-08T07:12:15.780 回答