我試圖在整個屏幕上顯示最多9個參數, ,然後在每一行後面顯示一個,直到沒有剩下的一行。使用批處理文件SHIFT命令
我嘗試這樣做:
@echo off
echo %*
shift
echo %*
shift
echo %*
實際結果:
a b c d e f
a b c d e f
預期結果:
A B C D E F
B C D E F
C D E F
D E F
E F
F
任何幫助嗎?
謝謝。
我試圖在整個屏幕上顯示最多9個參數, ,然後在每一行後面顯示一個,直到沒有剩下的一行。使用批處理文件SHIFT命令
我嘗試這樣做:
@echo off
echo %*
shift
echo %*
shift
echo %*
實際結果:
a b c d e f
a b c d e f
預期結果:
A B C D E F
B C D E F
C D E F
D E F
E F
F
任何幫助嗎?
謝謝。
移不改變實際訂單,只是索引/指針參數。
試試這個:
@echo off
echo %1
shift
echo %1
shift
echo %1
echo %*
,你會得到這樣的:
a
b
c
a b c d
「轉變已經沒有在%*批處理參數影響」
來源:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true
我建議改變你的代碼迴路或東西
的%*
始終打印所有參數的命令行(除%0
)。它不符合SHIFT命令。
你需要顯式地通過回聲定位所有參數:如果你想獲得它不會影響%*
的%1
,%2
等價值%1 %2 %3...
@echo off
:loop
if "%~1" neq "" (
echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
goto :loop
)
SHIFT
是值得的。這個腳本給你你所期望的輸出。
@echo off
setlocal enabledelayedexpansion
set args=0
for %%I in (%*) do set /a "args+=1"
for /l %%I in (1,1,%args%) do (
set /a idx=0
for %%a in (%*) do (
set /a "idx+=1"
if !idx! geq %%I set /p "=%%a "<NUL
)
echo;
)
輸出:
C:\Users\me\Desktop>test a b c d e f
a b c d e f
b c d e f
c d e f
d e f
e f
f
@大衛感謝您的指示,我現在明白了。非常感謝。 ECHO%1%2%3%4%5%6%7%8%9 移 ECHO%1%2%3%4%5%6%7%8%9 移 ECHO%1% 2%3%4%5%6%7%8%9 – naveencgr8 2013-04-08 17:42:21
一個很好的「趕上所有」的例子:http://stackoverflow.com/questions/830565/how-do-i-check-that-a-parameter-被定義的 - 當通話-A-批處理文件/ 34552964#34552964 – 2016-01-01 01:49:29