我无法在Windows 10上的.bat文件中使用它。控制台打开并退出跳过功能中的暂停。
@echo off
:: SETLOCAL EnableExtensions EnableDelayedExpansion
echo.
call :test "param1",<nul ^
"param2",<nul ^
"param3",<nul ^
"param4"
exit
:test
cls
echo "%~1"
echo "%~2"
echo "%~3"
echo "%~4"
echo.
echo This pause doesn't work with caret to split parameters ↓
pause
exit /b
但这会显示2暂停
@echo off
:: SETLOCAL EnableExtensions EnableDelayedExpansion
echo.
call :test "param1",<nul ^
"param2",<nul ^
"param3",<nul ^
"param4"
pause
exit
:test
cls
echo "%~1"
echo "%~2"
echo "%~3"
echo "%~4"
echo.
echo This pause doesn't work with caret to split parameters ↓
pause
exit /b
任何想法是否有可能使第一个代码保持插入符号分割参数?
是的,如果我删除<nul
,则暂停功能将起作用,但我无法获得param3
和param4
。我走到了尽头。
编辑:最好的解决方案是避免插入符号。感谢您的启示,证实了我的想法。
答案 0 :(得分:4)
call :test "param1",<nul ^
"param2",<nul ^
"param3",<nul ^
"param4"
与
相同call :test "param1","param2","param3","param4" 0<nul
这意味着:调用 :test
子例程
"param1","param2","param3","param4"
和nul
中读取所有键盘输入 。因此,pause
子例程中的所有:test
都会立即恢复,因为它来自nul
。
阅读Redirection:
command < filename Type a text file and pass the text to command
数字句柄:
STDIN = 0 Keyboard input
STDOUT = 1 Text output
STDERR = 2 Error text output
UNDEFINED = 3-9
答案 1 :(得分:0)
当您向呼叫添加<nul ^
时,它有两种不同的效果。
1)它会抑制pause
等待,因为pause
接受nul
的输入
2)<nul ^
稍微更改一行继续,它避免了下一行中第一个字符的转义。
顺便说一下。您不需要任何逗号来分割调用中的参数。
您可以简单地使用(请注意行中的第一个空格)
call :test "param1" ^
"param2" ^
"param3" ^
"param4"
如果您确实想要使用redirect caret
行为,可以将重定向从<nul
更改为2>nul
。
但是你输掉 stderr输出
call :test "param1" 2>nul ^
"param2" 2>nul ^
"param3" 2>nul ^
"param4"