批量循环在几次通过后错过了命令

时间:2012-04-13 15:58:18

标签: loops batch-file

我试着写简单的程序。它应该找到.pak文件(在这种情况下是zip,但是有更改的扩展),提取它们并使用arc打包它们。

@echo off
for /r %%i in (*.pak) do ren %%~i %%~ni.arc
for /r %%i in (*.arc) do (
mkdir %%~ni
cd %%~ni
..\arc.exe x -o+ "%%~i" //extract archive at current location//
del "%%~i"
..\arc.exe a -m9 -r "%%~i" *.* //pack files and folders in current folder and create
archive at specific location//
cd..
RD /s /q %%~ni
)
pause

Arc命令可以解决这个问题。一切都很完美,直到后来很少。它似乎突然停止执行cd ..命令,因为它开始创建文件夹然后文件夹然后一次又一次。

文件位置:
... \ arc.exe
... \ program.bat
... \ file1.pak
... \ folder1 \ file2.pak
... \ folder2 \ file3.pak
包等

我也尝试了

@echo off
setlocal enableextensions enabledelayedexpansion
for /r %%i in (*.pak) do ren %%~i %%~ni.arc
for /r %%i in (*.arc) do (
mkdir %%~ni
cd %%~ni
..\arc.exe x -o+ "%%~i"
del "%%~i"
..\arc.exe a -m9 -r "%%~i" *.*
cd..
RD /s /q %%~ni
)
pause

相同的结果

1 个答案:

答案 0 :(得分:0)

您绝对不希望启用延迟扩展,因为如果文件名恰好包含!字符,它会损坏文件名。

我相信你的问题只是你没有引用你的路径/文件名。除非引用它们,否则路径/名称中的空格和特殊字符将导致问题。

这是完全未经测试的,但我认为这可能会解决您的问题:

@echo off
for /r %%i in (*.pak) do ren "%%i" "%%~ni.arc"
for /r %%i in (*.arc) do (
  mkdir "%%~ni"
  cd "%%~ni"
  ..\arc.exe x -o+ "%%~i" //extract archive at current location//
  del "%%i"
  ..\arc.exe a -m9 -r "%%i" *.* //pack files and folders in current folder and create archive at specific location//
  cd..
  rd /s /q "%%~ni"
)
pause