0

好的,我发现了一些关于此的问题,但每个问题都说确保在第二个 bat 文件中使用CALLexit \bgoto eof,但由于某种原因我没有让它工作,我都尝试过,批处理文件每次执行后都会退出第一个调用语句:

批处理文件 1 (myscript.bat):

:@echo off
del files
dir /B /O-D | find "test2" > tmp
dir /B /O-D | find "test3" > tmp2
CALL head 1 tmp > files
CALL head 1 tmp2 >> files

头.bat:

@echo off

if [%1] == [] goto usage
if [%2] == [] goto usage

call :print_head %1 %2
goto :eof

REM
REM print_head
REM Prints the first non-blank %1 lines in the file %2.
REM
:print_head
setlocal EnableDelayedExpansion
set /a counter=0

for /f ^"usebackq^ eol^=^

^ delims^=^" %%a in (%2) do (
        if "!counter!"=="%1" goto :eof
        echo %%a
        set /a counter+=1
)

goto :eof

:usage
echo Usage: head.bat COUNT FILENAME

执行:

C:\Users\ots>myscript.bat

C:\Users\ots>del 文件

C:\Users\ots>dir /B /OD | 找到“test2”1>tmp

C:\Users\ots>dir /B /OD | 找到“test3”1>tmp2

C:\Users\ots>CALL head 1 tmp 1>文件

C:\用户\ots>

我怎样才能让它运行第二个“tmp2”呼叫线?

谢谢!

4

1 回答 1

4

您的代码很好,确实进行了两次调用。

问题是您在 head.bat 中将 echo 设置为 OFF,因此在第一次调用后,您的命令不会在控制台上得到回显,但这并不意味着文件没有被调用。

要验证这一点,请@echo off从 head.bat 中删除,您将看到第二个 CALL 命令。

于 2012-10-26T22:21:04.520 回答