如何通过将变量与另一个变量相乘来多次回显变量?

时间:2017-04-13 11:26:32

标签: batch-file

我正在编写批处理脚本,我无法回显变量,这是脚本,

@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结束,谢谢。

4 个答案:

答案 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次。