所以这是我正在编写的一个脚本示例,用于生成txt文件,其中包含一系列正确格式化的命令,这些命令将根据一系列问题传递给另一个系统。
如果为RedirectMatch 301 ^/$ http://testsite.com/en/
,objectName
或objectNumber
分配了字母数字值,则脚本将正确写入txt文件。但是,如果我要分配一个数值,则该值不会写入txt文件。
我猜这是一个与使用逗号有关的语法问题,因为我可以用几乎任何东西替换它,脚本会表现,但不幸的是它必须是一个逗号。
objectCategory
如果@ECHO OFF
SET objectCounter=1
SET /p objectName=What is the name of the object %objectCounter%?:
@ECHO OBJECTNAME%objectCounter%,%objectName%> objects.txt
SET /p objectNumber=How many of object %objectCounter% are there?:
@ECHO OBJECTNUMBER%objectCounter%,%objectNumber%>> objects.txt
SET /p objectCategory=Which group does object %objectCounter% belong to?:
@ECHO OBJECTCATEGORY%objectCounter%,%objectNumber%>> objects.txt
的值为objectNumber
,则这是输出到txt文件的示例:
1
如果为OBJECTNAME1,Apple
OBJECTNUMBER1,
OBJECTCATEGORY1,Fruit
分配的值为objectNumber
或更多,则这是输出到txt文件的示例:
2
答案 0 :(得分:2)
这是一个简化:echo
命令将文本data 1
发送到文件:
echo data 1>somewhere.txt
这里很容易看到1
将由解析器处理为要重定向的流编号,而不是要发送到文件的数据。
但问题不是使用空格,而是使用逗号。为什么同样的行为?因为从解析器的角度来看,空格,制表符,逗号,分号,括号和等号是分隔符。所有这些行都以相同的方式失败(标签省略)
echo data 1>>somewhere.txt
echo data,1>>somewhere.txt
echo data;1>>somewhere.txt
echo data=1>>somewhere.txt
echo data(1>>somewhere.txt
echo data)1>>somewhere.txt
如何处理?有必要将数字与重定向分开,因此我们可以更改行中的顺序
>somewhere.txt echo data,1
或强制解析器看到分离
(echo data,1)>somewhere.txt
或者,如果数据在变量中,我们也可以使用延迟扩展
set "n=1"
setlocal enabledelayedexpansion
echo data,!n!>somewhere.txt
当然,我们也可以做到
echo data,1 >>somewhere.txt
在数据和重定向之间包含空格,但空间将包含在重定向数据中。
另一种选择是重新组织代码
@ECHO OFF
SET objectCounter=1
SET /p "objectName=What is the name of the object %objectCounter%?: "
SET /p "objectNumber=How many of object %objectCounter% are there?: "
SET /p "objectCategory=Which group does object %objectCounter% belong to?: "
> objects.txt (
ECHO OBJECTNAME%objectCounter%,%objectName%
ECHO OBJECTNUMBER%objectCounter%,%objectNumber%
ECHO OBJECTCATEGORY%objectCounter%,%objectCategory%
)
答案 1 :(得分:1)
看起来它与使用逗号的连接中的输出重定向有关。我认为,使用逗号,数值被绑定到重定向而不是输出的东西。
换句话说,while:
set x=1
echo xyzzy%x%>qq.txt
将起作用(输出的内容为xyzzy%x%
,重定向为>qq.txt
),以下内容不会:
set x=1
echo xyzzy,%x%>qq.txt
(大概是因为输出的东西是xyzzy,
,其重定向操作1>qq.txt
与>qq.txt
相同。这也解释了1
与其他数字之间的差异,因为1
是标准输出。
即使没有变量扩展,您也可以看到类似的问题:
C:\pax> echo xyzzy1>qq.txt
C:\pax> type qq.txt
xyzzy1
C:\pax> echo xyzzy,1>qq.txt
C:\pax> type qq.txt
xyzzy,
解决这个问题的一种方法是重新组织你的组件,使数字值不能与重定向联系起来:
>>objects.txt ECHO OBJECTNUMBER%objectCounter%,%objectNumber%
我倾向于将它们放在开头,因为使用了类似的东西:
echo xyzzy >file
实际上会在xyzzy
之前输出>
和空格。
修改那样的行(并修复你的第三个echo
以便它再输出类别而不是数字)给你:
What is the name of the object 1?: Apple
How many of object 1 are there?: 1
Which group does object 1 belong to?: Fruit
结果文件为:
OBJECTNAME1,Apple
OBJECTNUMBER1,1
OBJECTCATEGORY1,Fruit