我编写了以下批处理脚本,它在目录上运行另一个批处理脚本,或者在目录树上添加标志,然后在不同驱动器(Z :)上的等效目录或目录树上运行。无论我选择哪个选项,它都会输出错误“系统无法找到指定的路径”。如果我只在一个目录上执行它,它确实会做它应该做的事情,即使它给出了错误。它在目录树上无法成功运行。我在没有@echo的情况下运行它来尝试了解它失败的地方,但没有成功。它试图改变的目录确实存在。
@echo off
set origdir=%CD%
if X%~f1==X (
echo Please input a directory.
goto done
)
chdir /d %~f1
for %%X in (myotherscript.bat) do (set FOUND=%%~$PATH:X)
if not defined FOUND (
echo myotherscript is not in your PATH
)
if X%2==X/R (
goto recursive
) else ( goto single )
:recursive
for /d /r %%G in (.) do call myotherscript
echo Z:%~p1
chdir /d "Z:%~p1"
for /d /r %%G in (.) do call myotherscript
goto ended
:single
call myotherscript
echo Z:%~p1
chdir /d "Z:%~p1"
call myotherscript
goto ended
:ended
chdir /d origdir
goto done
:done
pause
这是“myotherscript”是的,清除确实存在。
@echo off
if exist "D:\path\to\purge.bat" (
call purge
for %%f in (*.log.*) do call :renameit "%%f"
for %%f in (*.drw.*) do call :renameit "%%f"
for %%f in (*.asm.*) do call :renameit "%%f"
for %%f in (*.prt.*) do call :renameit "%%f"
goto done ) else (
echo Purge does not exist.
goto done )
:renameit
ren %1 *.1
:done
任何帮助将不胜感激。 感谢
答案 0 :(得分:1)
我不确定为什么这个(很老的)问题被重新激活了。但是既然如此,那就让我们看看我们是否可以解决这个问题。
这里似乎有两个问题。第一:
它输出错误"系统找不到指定的路径。"
这看起来像这一行上的简单错字:
chdir /d origdir
没有'%'标记,这是尝试更改为名为origdir
的目录,而不是运行脚本的原始目录,这将是:
chdir /d %origdir%
第二个问题是:
如果我只在一个目录上执行它,它确实做了它应该做的事情,即使它给出了错误。它在目录树上无法成功运行。
猜测,这是由于这一行:
if X%2==X/R
" IF"区分大小写。如果您尝试使用/r
运行此操作,则不会看到递归请求,并且始终会执行single
。
答案 1 :(得分:0)
对我来说,我得到了“系统无法找到指定的路径”,因为脚本中稍后会出现缺少的exe。似乎DOS中的管道并不总是按执行顺序输出数据。我习惯了UNIX,脚本中每个“echo”命令的输出按顺序排列,所以我在.bat文件中添加了调试输出,试图告诉我执行了哪些行。
问题是,有关未找到文件的错误发生在输出日志(和屏幕)中早于echo命令指示的方式。所以我不知道WinXP cmd shell是否会提前几步,或者是在解析被调用的bat文件启动期间要调用的exe或者是什么。
事实证明,它实际上是一个通过调用蝙蝠脚本运行的.exe的错误路径,但是echo调试语句让我觉得我在脚本的早期部分。一旦我在exe之前添加了正确的路径,它就全部工作了