我真的不习惯制作批处理文件,所以我可能做错了什么,但我真的遇到了关闭/打开回声的问题。(也就是说,如果您发现我遗漏的任何其他错误,请随时指出)
这是我的代码的简化版本:
@echo off
setlocal
set args=
set dir="."
:getargs
IF "%2"=="" (
set dir="%1"
goto callbatch
)
set args=%args% %1
shift
goto getargs
:callbatch
for %%f in (%dir%\*.txt) do (
echo processing %%f
"%BATCHHOME%\batch.bat %args% %%f
echo
)
所以基本上,我在 BATCHHOME 中有一个批处理文件,它对单个 txt 文件执行某些操作,我想生成一个批处理文件来处理给定目录中的所有 txt 文件。循环中的唯一回声是为了更好地说明问题。
现在,这就是我遇到问题的地方。这个的输出看起来像:
processing foo\text1.txt
some output from batch.bat
ECHO is on.
C:\somedir>(
echo processing foo\text2.txt
"C:\the\path\of\batch.bat" the arguments here foo\text2.txt
)
ECHO is on.
C:\somedir>(
echo processing foo\text3.txt
"C:\the\path\of\batch.bat" the arguments here foo\text3.txt
)
ECHO is on.
(etc)
好的...我不知道为什么我正在调用的批处理文件会打开回显,但我没有成功,所以我每次都将其关闭!我将最后一部分更改为:
:callbatch
for %%f in (%dir%\*.txt) do (
echo processing %%f
"%BATCHHOME%\batch.bat %args% %%f
echo off
)
echo
echo on
echo
echo Finished!
(同样,两个单独的“echo”用于调试)所以现在输出如下所示:
processing foo\text1.txt
some output from batch.bat
processing foo\text2.txt
some output from batch.bat
processing foo\text3.txt
some output from batch.bat
(etc.)
ECHO is off.
ECHO is on.
Finished!
这几乎是完美的,但有些奇怪。如果回显打开,那么为什么它显示“完成!” 而不是“回声完成!”?然而,更大(但相关)的问题是,当批处理文件完成后,我不再显示我的路径。换句话说,而不是:
C:\Somedir>_
我只是得到
_
我需要手动输入“echo on”才能再次显示路径。我哪里做错了?
编辑:为了澄清,我知道“回声”本身会打印回声的当前状态。这就是我的意图。在第一个代码中,它们显示在我调用另一个批处理文件后 echo 神秘地打开了。在第二个中,它显示在批处理文件的末尾 echo 已打开,但行为却好像不是。那是我的问题。