[英]How do I conditionally turn @ECHO ON/OFF in a Windows batch file?
[英]I need to echo ten lines to a text document using a batch file with echo off. The file gets saved, but each line says ECHO is off. my batch file is-
@echo off
color a
:ini
set /p 1= %random%
set /p 2= %random%
set /p 3= %random%
set /p 4= %random%
set /p 5= %random%
set /p 6= %random%
set /p 7= %random%
set /p 8= %random%
set /p 9= %random%
set /p 10= %random%
设置随机数
(
echo %1%
echo %2%
echo %3%
echo %4%
echo %5%
echo %6%
echo %7%
echo %8%
echo %9%
echo %10%
)>file.txt
试图将它们回显到文件中我的复杂之处在于回显已关闭。 我需要把它关掉。
变量不应仅以数字命名。 Per dbenham的评论如下:
%1%被解释为%1(第一个脚本参数),在这种情况下碰巧是未定义的,后面跟着一个单独的%,该%被简单使用。 通常,您不应使用以数字开头的名称来定义变量。 但是,如果使用延迟扩展,则可以访问此类变量-%1%不起作用,但!1! 确实有效。
因此,在您的情况下,解析器遇到无效变量(例如%1%
),因此它仅处理ECHO
命令,该命令仅在ECHO打开或关闭时输出。
除此之外,当您尝试使用随机数作为提示文本来提示输入10个值时,脚本似乎有些偏离。
如果只需要输出10个随机数,则可以使用FOR
循环“优雅地”执行:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET FileName=file.txt
SET NumberOfValues=10
REM Remove existing file if it exists.
IF EXIST "%FileName%" DEL "%FileName%"
FOR /L %%A IN (1,1,%NumberOfValues%) DO ECHO !RANDOM!>>file.txt
ENDLOCAL
另外,一种更成功的方法是使用这种衬板,您可以在Windows命令提示符下直接运行它(不需要批处理文件):
CMD /V:ON /C FOR /L %A IN (1,1,10) DO @ECHO !RANDOM!>file.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.