【问题标题】:Batch - loop misses commands after few passes批处理 - 循环几次后错过命令
【发布时间】:2012-04-13 15:58:17
【问题描述】:

我尝试编写简单的程序。它应该找到 .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

同样的结果

【问题讨论】:

  • 用 DOS 批处理文件做任何稍微复杂的事情都是一件痛苦的事情。你能切换到 PowerShell 吗?如果是这样,我建议调查一下。
  • 不,因为我想做任何人都可以使用的“反向”程序,而无需安装额外的东西。
  • 是否有任何子子文件夹?

标签: loops batch-file


【解决方案1】:

您绝对不想启用延迟扩展,因为如果它们碰巧包含! 字符,它会损坏文件名。

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

这完全未经测试,但我认为它可以解决你的问题:

@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

【讨论】:

  • 感谢您的回复。不幸的是,它仍然不起作用。在某些时候它说它找不到特定的文件。可能在 rd /s /q "%%~ni"。它再次在一个文件夹的内部和内部创建了许多文件夹,并且路径太长,您甚至无法打开所有文件夹。奇怪的是:如果我使用 %%~i 的完整路径和 %%i 的文件名为每个文件(甚至 10 个)重写这个循环,它可以工作......
猜你喜欢
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2020-09-29
  • 2010-10-29
相关资源
最近更新 更多