0

我试图编写简单的程序。它应该找到 .pak 文件(在这种情况下为 zip,但更改了 etension),提取它们并使用 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

同样的结果

4

1 回答 1

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
于 2012-04-13T17:41:06.510 回答