【问题标题】:Clear variables values in batch批量清除变量值
【发布时间】:2016-01-25 07:43:18
【问题描述】:

我正在读取两个文本文件来设置两个变量 (u,l) 的值。现在我想编写脚本来运行多个文件。当它读取第一个文件时,它将设置各个文件中的变量,但是当它读取第二个文件时,它将设置这些变量的相同值。

@echo on
set /p u=< ul.txt
set /p l=< ll.txt
echo %u%-%l%

我尝试了 SETLOCAL/ENDLOCAL 选项,但在这种情况下,它不会读取变量值并收到 ECHO 关闭的错误。即使我在脚本的开头写了set u=set l=,但在我的情况下不起作用。

【问题讨论】:

  • echo is off 表示,您的变量为空。您确定批处理文件在 txt 文件所在的同一目录中运行吗? (在脚本中添加dir ul.txt 以检查是否找到文件。)
  • 是的,先生批处理文件在 txt 文件所在的同一目录中运行。我的脚本正在查找文件,但无法为第二个文件设置变量值。
  • 对我来说很好。必须有其他东西... 您在问题中编写的代码真的不适合您吗?
  • 该代码是我脚本的一部分,它在读取第一个文件时工作正常,但对于第二个文件,我的 ul.txt 和 ll.txt 正在根据代码更改,但值变量没有分别改变。使用以前的文件值设置的变量。
  • 如果它不工作,那不可能是你所有的代码。您需要显示所有代码。

标签: batch-file


【解决方案1】:

您的代码,如给定的,工作正常。但是,我猜它是来自 if 语句或 for 循环内部的代码。如果是这种情况,您应该使用delayed expansion。您可以像这样使用延迟扩展:

这是一个示例,不是您需要的确切代码:

@echo on
setlocal EnableDelayedExpansion

if 1 equ 1 (
set /p "u=< ul.txt"
set /p "l=< ll.txt"
echo !u!-!l!
)
pause

FOR /L %%G IN (1,1,1) DO (
set /p "u=< ul.txt"
set /p "l=< ll.txt"
echo !u!-!l!
)
pause

set /p u=< ul.txt
set /p l=< ll.txt
echo %u%-%l%
pause

请注意,在 if 语句和 for 循环中,当 % 符号围绕变量名称时,您将其替换为 !。所以%someVar% 变为!someVar!,但%%F 保持%%F

在 if 语句和 for 循环之外,所以在 () 之外,您可以使用普通的 %someVar%

【讨论】:

  • 亲爱的 Dennis van Gils 感谢您的回答,但在我的情况下,它不是 if 语句的一部分,而是我用来运行多个文件的 for 循环的一部分。跨度>
  • 那么答案仍然是你应该使用的!而不是 %
猜你喜欢
  • 2014-01-13
  • 1970-01-01
  • 2013-04-22
  • 2021-03-07
  • 2011-11-07
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多