无法在批处理脚本中将用户输入值回显到文件

时间:2012-12-03 22:29:19

标签: windows cmd batch-file

我正在编写一个批处理文件,它将根据多个用户输入值生成/写入属性文件。但是,它不记录输入值。结果看起来像

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 
) 

2 个答案:

答案 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 

)