2017-04-13 104 views
1

我寫一個批處理腳本,我有麻煩呼應的變量,這裏是腳本,如何通過將變量乘以另一個變量來多次回顯變量?

@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結束,謝謝。如果需要的話

回答

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什麼也沒有只是一個安全措施,以確保如果它包含一個值,它首先被清除。

for /L執行call命令num2次。

call命令在子進程執行SET "out=%out%%num1%"因爲每個%%被解釋爲escaped-%(%%轉義字符) - 「轉義」的字符是指關掉它的特殊含義。

語法SET "var=value"(其中值可以是空的)用於確保任何雜散尾部空格不包括在分配的值。

+0

非常感謝你! – Jacob

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 
1

這是爲了解決這個問題,使用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 - 的乘法術語並不確切在這種情況下;也許「回聲一個變量被另一個變量指定的時間」更加清晰......

1

如果你想要的是你可以做這樣的事情在同一行打印num1num2時間:

@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次。

+0

@Compo感謝您的編輯! – dcg

相關問題