我想在Windows命令提示符下与单行文本文件进行比较

时间:2015-08-20 20:32:04

标签: windows batch-file cmd

在BASH中这样做很简单:

#!/bin/sh
echo "3" > text.file
foo=$(<text.file)
if [ $foo -eq 3 ]; then
echo "bar"
fi

返回bar

但是,Windows不会合作。

> ECHO "3" > test.file

> SET /p foo= < test.file

> ECHO %foo%
"3"

> IF %foo% equ 3 ECHO bar

> IF NOT %foo% equ 3 ECHO bar
bar

我很神秘,我真的需要让它发挥作用。我希望我没有做过一些非常愚蠢和基本的事情,但我担心我有。

2 个答案:

答案 0 :(得分:0)

当您使用引号将其写入test.file时,您需要使用引号括起3来进行比较:

ECHO "3" > test.file
SET /p foo= < test.file
ECHO %foo%
IF %foo% equ "3" ECHO bar

如果要将%foo%解析为整数以执行其他操作,请使用带有set参数的/a命令:

> SET /a foo=%foo%
> IF %foo% equ 3 ECHO bar
bar
编辑:我看到你正在尝试学习批处理,同时在linux shell中有一些经验,但MS Batch真的有限,要有一个完整的shell你应该看PowerShell

答案 1 :(得分:0)

由于您ECHO字面意思"3",包括引号,实际上您将"3"3进行比较,这当然会失败。所以:

  • 输入(ECHO 3) > test.file,因此您的比较IF %foo% equ 3 ECHO bar成功(此处为数字比较),
  • 或保留(ECHO "3") > test.file,但要比较IF %foo% equ "3" ECHO bar(请注意,由于"",这构成字符串比较);

请注意,我将ECHO命令放入括号(),因为否则尾随空格(重定向标记>之前的空格)将写入test.file as好。