2013-03-01 164 views
2

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

尝试重新命名'@echo off',这应该可以帮助你找出导致什么行“系统找不到指定的路径”。 – rojo 2013-03-01 16:35:16

+0

为什么你认为这个错误是在这个脚本中,而不是你的“myotherscript”? – dbenham 2013-03-01 18:59:22

+0

那么,我已经独立运行“myotherscript”,并没有问题。所以除非两者之间存在相互作用,否则我不会看到它会如何。我会将其添加到原始问题。 – ZackG 2013-03-01 20:35:42

回答

0

对我来说,我得到了“系统找不到指定的路径”,由于在脚本中稍后出现的exe文件丢失。看来DOS中的管道并不总是按照执行顺序输出数据。我习惯于UNIX中脚本中每个“echo”命令的输出顺序执行,因此我在.bat文件中添加了调试输出以尝试告诉我哪些行已执行。

问题是,没有找到文件的错误发生在输出日志(和屏幕)的方式早于回显命令会指示。所以我不知道WinXP cmd shell是否会提前几步执行,或者它是在调用bat文件的启动过程中调用exe文件或进行解析。

事实证明,这实际上是我从一个call'd bat脚本运行的.exe的不好的路径,但是echo调试语句让我觉得我在脚本的早期部分。一旦我在exe之前添加了正确的路径,它一切正常

相关问题