init
我正在尝试创建一个在命令运行时更新的进度条。 事情一直运作良好,除了我需要能够在for命令中使用call命令,并且我当前的设置(下面)不起作用。
如何在for循环中使用call命令?
答案 0 :(得分:2)
不能直接从处理过的项目中调用子程序。
但是可以使用此Aacini's trick来解决此问题:
@echo off
if /I "%1" equ "call" shift & shift & goto %2
setlocal enabledelayedexpansion
for %%a in (*.*) do (
set /a "pre+=1
)
for /f %%a in ('%0 call :star') do (
set /a "count=count+10000"
set /a "fi=10000/pre"
set /a "en=!fi!*!count!"
set "br=!en:~0,-6!"
title !br!
)
pause
exit /b %errorlevel%
:star
echo Some stuff.
echo Some more.
exit /b
你需要在脚本开头加上if /I "%1" equ "call" shift & shift & goto %2
行,然后你可以用%0 call :start
调用子程序形成for循环。
答案 1 :(得分:1)
阅读整个 FOR
Command-Line Reference或for /F
:
如果启用了命令扩展......
...
最后,您可以使用
FOR /F
命令来解析a的输出 命令。您可以通过在括号a之间创建文件集来完成此操作 后引用字符串。它将被视为命令行,其中 传递给子CMD.EXE
,并将输出捕获到 内存并解析,好像它是一个文件......
让我指出(详细说明)上述语句:for /F
命令捕获并解析指定命令的STDOUT
输出。
但是,对于call :star
,这是空的(因为Invalid attempt ...
消息属于STDERR
stream),请参阅下一个示例:
==> call :star
Invalid attempt to call batch label outside of batch script.
==> call :star 2>NUL
==>