1

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

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 
) 
4

2 回答 2

3

没有经验的批处理人员的经典问题:)

%prop1%解析行时展开。您的问题是括号内的所有内容都是一次性解析的。所以你看到的值就是你输入 IF 语句之前存在的值。

你有两个简单的解决方案。

1)通过反转逻辑并使用 GOTO 来消除封闭的括号

@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) 使用延迟扩展——这发生在括号内的每一行执行之前

@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
)
于 2012-12-03T22:52:53.717 回答
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 

)
于 2012-12-03T23:31:04.810 回答