【问题标题】:variables are not updating after control+C in a batch file批处理文件中的 control+C 后变量未更新
【发布时间】:2014-12-15 01:52:43
【问题描述】:

我有以下代码,混合了批处理和 linux-dos(gawk 命令)。我没有源(带有选项 -d -v -g -r 的 sortgrad),所以无法控制它。该代码运行良好,除非 sortgrad 冻结,然后我必须使用 control+C 并继续在以下目录中工作,但它不会更新 sortgrad 中的输入选项(变量)。 然后我有两个问题,在必要时如何在没有 control+C 的情况下继续 for 循环以及更新变量的问题。谢谢


for /f "eol= " %%i in (tests) do ( 

cd %%i
echo.2 > input
echo.y >> input
echo.1 >> input
echo.%%i.out >> input

gawk "{print $1}" data > v
gawk "{print $2}" data > g

set /p grad= < g
set /p vel= < v

echo %grad% | gawk "{print $1-0.03}" > g1
echo %grad% | gawk "{print $1+0.03}" > g2
set /p gmin= < g1
set /p gmax= < g2

cmd.exe /C "sortgrad -d vanloc.dvr -v %vel% 7.0 -g %gmin% %gmax% -r 1.70 1.80" < "input" > result

cd..)

【问题讨论】:

  • 只是一个想法:如果将 for 循环的语句放在子例程中并调用它会发生什么?即 for /f "eol=" %%i in (tests) do 'call :sub'

标签: variables batch-file for-loop


【解决方案1】:

正在设置变量,但您没有正确访问它们。

%grad% 的正常扩展发生在解析时,FOR 循环中的整个带括号的块被一次性解析。所以%grad% 仍然是一个常数值——循环开始之前存在的值。

这就是延迟扩展的设计目的。将setlocal enableDelayedExpansion 放在顶部,然后以!grad! 访问您的变量

【讨论】:

  • 按照说明批量工作。谢谢。如果程序冻结,仍需要 Control+C。有什么方法可以控制完成一个进程(exe)并继续下一个循环所用的时间(不工作)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2014-01-08
  • 1970-01-01
  • 2022-11-26
  • 2013-05-27
相关资源
最近更新 更多