批处理脚本失败,“系统找不到指定的路径”

时间:2013-03-01 16:30:51

标签: batch-file chdir

我编写了以下批处理脚本,它在目录上运行另一个批处理脚本,或者在目录树上添加标志,然后在不同驱动器(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

任何帮助将不胜感激。 感谢

2 个答案:

答案 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之前添加了正确的路径,它就全部工作了

相关问题