3

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

@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

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

4

2 回答 2

1

对我来说,我得到了“系统找不到指定的路径”,因为在脚本后面似乎缺少了一个 exe。似乎DOS中的管道并不总是按执行顺序输出数据。我习惯了 UNIX,其中脚本中每个“echo”命令的输出都是按顺序排列的,所以我在 .bat 文件中添加了调试输出,试图告诉我执行了哪些行。

问题是,关于未找到文件的错误在输出日志(和屏幕)中发生的方式早于 echo 命令所指示的方式。所以我不知道WinXP cmd shell是否提前了几步,或者它正在解析exe在被调用的bat文件启动期间调用或什么。

事实证明,这实际上是我从调用的 bat 脚本运行的 .exe 的错误路径,但 echo debug 语句让我觉得我在某种程度上是脚本的早期部分。一旦我在exe之前添加了正确的路径,它就一切正常了

于 2013-07-03T18:15:21.997 回答
1

我不确定为什么这个(非常老的)问题会被重新激活。但是既然有,让我们看看我们是否可以关闭它。

这里似乎有两个问题。第一的:

它输出错误“系统找不到指定的路径”。

这看起来像是这一行的一个简单错字:

chdir /d origdir

如果没有 '%' 标记,这将尝试更改为字面上名为 的目录origdir,而不是运行脚本的原始目录,即:

chdir /d %origdir%

第二个问题是:

如果我只在一个目录上执行它,它会做它应该做的事情,即使它给出了错误。它不能在目录树上成功运行。

猜测,这是由于这条线:

if X%2==X/R

"IF" 区分大小写。如果您尝试使用 运行它/r,它不会看到递归请求并且总是会执行single

于 2018-04-06T05:37:22.073 回答