我知道在这方面有类似的话题,但这有点不同。我在网上看过,有些方法可以使用%~
来传递变量。我想传递许多变量,例如:
BATCH FILE 1:
@echo off
set file_var1=world
set file_var2=%computername%
set file_var3=hehexd
set file_var4=yolo
set file_var5=h
set file_var6=he
set file_var7=heh
set file_var8=hehe
set file_var9=hehex
set file_var10=hehexd
set file_var11=hehexd1
set file_var12=hehexd12
set file_var13=hehexd123
set file_var14=hehexd1234
set file_var15=hehexd12345
set file_var16=hehexd123456
set file_var17=hehexd1234567
set file_var18=hehexd12345678
set file_var19=hehexd123456789
set file_var20=hehexd1234567890
call arg_batch2.bat %file_var1% %file_var2% %file_var3% %file_var4% %file_var5% %file_var6% %file_var7% %file_var8% %file_var9% %file_var10% %file_var11%
BATCH FILE 2:
@echo off
set arg1=%~1
set arg2=%~2
set arg11="%~11"
echo Hello, %arg1% AND %arg2% ! My name is %arg11%.
PAUSE
我应该得到hehexd1
的结果。但是我意识到结果是world1
。有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
要回答有关您收到的结果为world1
而不是hehexd1
的原因的问题,以下行未将arg11
设置为传递给arg_batch2.bat
的第11个参数将它设置为第一个参数后跟字符1.这是因为正如@Stephan所提到的那样,除非你将它们移过来,否则只有九个参考引用。
set arg11="%~11"
由于第一个参数为world
,因此结果为world
+ 1
= world1