两台PC上的批处理脚本相同但不起作用?

时间:2014-09-02 12:57:30

标签: windows batch-file cmd

您好我有2个批处理文件,它在一台机器上运行完美,但在另一台机器上运行不太完美。

这是代码。

set /p "ln=" <"C:\LoginSystem\userl.txt"
set "%ln:&="&set "%"
set realuser=%user:"=%
echo %realuser%

所以在我的机器上它显示如下:


    echo Liam
    Liam

在另一台机器上它显示如下:


    echo "=
    "=

这是完全相同的机器唯一不同的是一个运行Windows 8(工作)和其他Windows 7(“=)

编辑:

谢谢大家的答案,我设法通过编辑生成userl.txt文件的方式来解决这个问题,使其只显示名称,例如“Liam”没有引号。然后使用此

    set / p user =

这似乎适用于我需要的东西,只有1个值会出现在该文件中。

谢谢大家!

2 个答案:

答案 0 :(得分:1)

简单的echo %thisvariabledoesnoexist:"=%会显示相同的结果。

观察输出的原因是变量%user%似乎必须在set "%ln:&="&set "%"行中赋值,但没有得到任何值。

问题可能是输入行不包含所需的值,或者输入行的格式与预期的格式不同。

答案 1 :(得分:0)

正如MC ND指出的那样,关键点是必须定义变量user才能正常工作。如果未定义,则会得到问题结果。

我没有看到在具有相同批处理脚本的两台计算机上处​​理相同的user1.txt文件可能会给出不同的结果。

罢工,我可以想到一种方式,但这是一个长镜头。假设前两行应该定义user变量,可能还有其他变量。但是假设前两行没有在任何一台机器上定义user变量。也许user已在脚本运行之前“工作”的机器上定义,并且未在另一台机器上定义。这是我能想出的唯一可以产生你描述的结果的东西。

我确实在您的代码中看到了一件令我担忧的事情。以下代码行表示有时您会在输入中获得引号。

set realuser=%user:"=%

您声明您的值中的引号会发生干扰,因此请将其删除。但是你太迟了!如果ln的值中有引号,则前一行可能无法正确设置所有值。

尝试以下方法:

set /p "ln=" <"C:\LoginSystem\userl.txt"
set "ln=%ln:"=%"
set "%ln:&="&set "%"
echo %user%