我正在编写一个批处理文件,它将根据多个用户输入值生成/写入属性文件。但是,它不记录输入值。结果看起来像
prop1=
prop2=
我想知道是否有一些我需要知道的东西阻止这种工作。
奇怪的是,如果我多次运行这个特定的脚本,echo的输出值似乎总是上次的用户输入。
代码:
@echo off
IF NOT EXIST data_file (
set /p prop1=Enter value:
set /p prop2=Enter value:
(echo prop1=%prop1%) > data_file
(echo prop2=%prop2%) >> data_file
)
答案 0 :(得分:2)
缺乏经验的游戏者的经典问题:)
解析行时会扩展 %prop1%
。您的问题是在一次通过中解析括号内的外翻。因此,您看到的值是输入IF语句之前存在的值。
您有两个简单的解决方案。
1)通过反转逻辑并使用GOTO
来消除封闭的parens@echo off
IF EXIST file goto skip
set /p prop1=Enter value:
set /p prop2=Enter value:
(echo prop1=%prop1%) >file
(echo prop2=%prop2%) >>file
:skip
2)使用延迟扩展 - 这是在执行parens中的每一行之前发生的
@echo off
setlocal enableDelayedExpansion
IF NOT EXIST file (
set /p prop1=Enter value:
set /p prop2=Enter value:
(echo prop1=!prop1!)>file
(echo prop2=!prop2!)>>file
)
答案 1 :(得分:0)
您需要使用SETLOCAL ENABLEDELAYEDEXPANSION扩展变量或使用CALL。
@echo off
IF NOT EXIST data_file (
set /p prop1=Enter value:
set /p prop2=Enter value:
(
Call echo prop1=%%prop1%%
Call echo prop2=%%prop2%%
) > data_file
)