我正在编写批处理脚本,我无法回显变量,这是脚本,
@echo off
set num1=1
set num2=10
set /a "out=%num1%*%num2%"
echo %out%
pause`
我收到的输出是10,这是有道理但我希望它回复'num1'十次,而不是将'num1'乘以'num2'。所以我希望输出为1111111111。
此外,我不想将命令循环10次,因为我将输出放入带有'output>>的文本文件中。 file.txt'否则我将在文本文件中结束这个,
1
1
1
1
1
1
1
1
1
1
我想以1111111111结束,谢谢。
答案 0 :(得分:2)
@ECHO OFF
SETLOCAL
set num1=1
set num2=10
SET "out="&FOR /L %%a IN (1,1,%num2%) DO CALL SET "out=%%out%%%%num1%%"
echo %out%
GOTO :EOF
如果需要,SET "out="
和FOR /L %%a IN (1,1,%num2%) DO CALL SET "out=%%out%%%%num1%%"
可能位于不同的行上。将out
设置为 no 只是一种安全措施,可确保如果包含值,则首先清除它。
for /L
执行call
命令num2
次。
call
命令在子进程中执行SET "out=%out%%num1%"
,因为每个%%
都被解释为转义 - %(%
是%
的转义字符) - “逃避”一个角色意味着关闭它的特殊含义。
语法SET "var=value"
(其中value可以为空)用于确保任何杂散尾随空格不包含在分配的值中。
答案 1 :(得分:1)
只是为了展示与set /A
和循环的不同方法:
@echo off
set /A "num1=1,num2=10,out=0"
:loop
set /a "out*=10,out+=num1,num2-=1"
If %num2% gtr 0 goto :loop
echo %out%
pause
答案 2 :(得分:1)
This is the simplest way to solve this problem, using Delayed Expansion.
@echo off
setlocal EnableDelayedExpansion
set num1=1
set num2=10
set "out="
for /L %%i in (1,1,%num2%) do set "out=!out!%num1%"
echo %out%
pause
PS - The multiply term is not exact in this case; perhaps "echo a variable the times indicated by another variable" be more clear...
答案 3 :(得分:1)
如果你想要的是在同一行打印num1
num2
次,你可以这样做:
@echo off
set "num1=1"
set "num2=10"
(for /L %%i in (1,1,%num2%) do set /p "=%num1%" <nul
echo()>file.txt
命令set /p "=%num1%" <nul
在没有%num1%
字符的当前行中打印文本LF
。因此num1
在同一行中打印num2
次。