我在回复变量时遇到问题 - 批处理

时间:2016-05-29 22:10:21

标签: variables batch-file echo

基本上,所有这些变量都设置为PLUS符号(+)
Echo %1,10% %2,10% %3,10% %4,10% %5,10% %6,10% %7,10% %8,10% %9,10% %10,10% Echo %1,9% %2,9% %3,9% %4,9% %5,9% %6,9% %7,9% %8,9% %9,9% %10,9% Echo %1,8% %2,8% %3,8% %4,8% %5,8% %6,8% %7,8% %8,8% %9,8% %10,8% Echo %1,7% %2,7% %3,7% %4,7% %5,7% %6,7% %7,7% %8,7% %9,7% %10,7% Echo %1,6% %2,6% %3,6% %4,6% %5,6% %6,6% %7,6% %8,6% %9,6% %10,6% Echo %1,5% %2,5% %3,5% %4,5% %5,5% %6,5% %7,5% %8,5% %9,5% %10,5% Echo %1,4% %2,4% %3,4% %4,4% %5,4% %6,4% %7,4% %8,4% %9,4% %10,4% Echo %1,3% %2,3% %3,3% %4,3% %5,3% %6,3% %7,3% %8,3% %9,3% %10,3% Echo %1,2% %2,2% %3,2% %4,2% %5,2% %6,2% %7,2% %8,2% %9,2% %10,2% Echo %1,1% %2,1% %3,1% %4,1% %5,1% %6,1% %7,1% %8,1% %9,1% %10,1%

但出于某种原因,这是输出: ,102,103,104,105,106,107,108,109,1010,10 ,92,93,94,95,96,97,98,99,910,9 ,82,83,84,85,86,87,88,89,810,8 ,72,73,74,75,76,77,78,79,710,7 ,62,63,64,65,66,67,68,69,610,6 ,52,53,54,55,56,57,58,59,510,5 ,42,43,44,45,46,47,48,49,410,4 ,32,33,34,35,36,37,38,39,310,3 ,22,23,24,25,26,27,28,29,210,2 ,12,13,14,15,16,17,18,19,110,1

有人可以向我解释发生了什么,因为我不知道 (我确实用set命令验证变量是否设置为+符号,并且它们是

2 个答案:

答案 0 :(得分:3)

  

Avoid starting variable names with a number,这将避免   变量被误解为parameter

同时阅读Windows Environment Variables

  

变量双方都有百分号:%ThisIsAVariable%   
变量名称可以包含空格,标点符号和大小写:   %_Another Ex.ample%
(这与Parameter variables不同   它只有一个%符号且总是一个字符长:%A,   %1

例如,你的第一行:

Echo %1,10% %2,10% %3,10% %4,10% %5,10% %6,10% %7,10% %8,10% %9,10% %10,10%
rem       ↑↑↑    ↑↑↑    ↑↑↑    ↑↑↑    ↑↑↑    ↑↑↑    ↑↑↑    ↑↑↑    ↑↑↑
rem       % % =  invalid variable name 
rem              nonexistent variables are evaluated to an empty string  in batch script
rem  ↑↑
rem  %1 = the 1st command line parameter supplied to a batch script
rem       evaluates to an empty string if no parameter is  supplied
rem                                 an isolated % percent sign is ignored ↑ 

评估为,102,103,104,105,106,107,108,109,1010,10

必读(整个帖子):How does the Windows Command Interpreter (CMD.EXE) parse scripts?

答案 1 :(得分:1)

JosefZ很好地解释了his answer中发生的事情。

我还有几点要求进一步理解。

批量参数(如%1)仅在批处理脚本中可用。命令行有一个稍微不同的解析器,它对批处理参数一无所知。因此,如果直接在命令行中输入命令,则代码将按预期工作。

如果启用延迟扩展,则可以使代码在批处理脚本中按预期工作:

@echo off
setlocal enableDelayedExpansion
Echo !1,10! !2,10! !3,10! !4,10! !5,10! !6,10! !7,10! !8,10! !9,10! !10,10!
Echo !1,9! !2,9! !3,9! !4,9! !5,9! !6,9! !7,9! !8,9! !9,9! !10,9!
Echo !1,8! !2,8! !3,8! !4,8! !5,8! !6,8! !7,8! !8,8! !9,8! !10,8!
Echo !1,7! !2,7! !3,7! !4,7! !5,7! !6,7! !7,7! !8,7! !9,7! !10,7!
Echo !1,6! !2,6! !3,6! !4,6! !5,6! !6,6! !7,6! !8,6! !9,6! !10,6!
Echo !1,5! !2,5! !3,5! !4,5! !5,5! !6,5! !7,5! !8,5! !9,5! !10,5!
Echo !1,4! !2,4! !3,4! !4,4! !5,4! !6,4! !7,4! !8,4! !9,4! !10,4!
Echo !1,3! !2,3! !3,3! !4,3! !5,3! !6,3! !7,3! !8,3! !9,3! !10,3!
Echo !1,2! !2,2! !3,2! !4,2! !5,2! !6,2! !7,2! !8,2! !9,2! !10,2!
Echo !1,1! !2,1! !3,1! !4,1! !5,1! !6,1! !7,1! !8,1! !9,1! !10,1!

但是......即使你在技术上可以使用以数字开头的变量名,我强烈建议你不要这样做

相关问题