【发布时间】:2022-01-22 14:29:18
【问题描述】:
在此批处理代码中工作了几天,但我无法使其正常工作。 为了给您一个视角,此代码旨在读取包含一些“选定”数字的文件,这些数字引用另一个文件夹中包含的其他文件。这些文件包含大量按行和列排列的数据。第一行并不重要,因此代码跳过 50 行以节省时间,然后我对第 2 列和第 7 列感兴趣,因此将这些列导出到每行的变量 (A,B)。如果在同一行上这两个变量之间存在值组合(例如 A>1000 和 B>0.03),则代码应该导出发生这种情况的文件号。 问题:比较这些列的 IF 没有按预期工作,GTR/GEQ 似乎不尊重“超过”,即使文件中没有这样的组合,代码也会导出文件编号。 到目前为止,我已经尝试了两个代码:
代码 1
@echo off
setlocal EnableDelayedExpansion
for /f "tokens=*" %%s in (selected.txt) do (
cd %~dp0\Melts\MeltNPTdis-8-%%s
for /f "skip=50 tokens=2,7 delims= " %%A in (file.txt) do (
if %%A GTR 1000 if %%B GTR 0.03 (
cd %~dp0
>>dummy.txt echo %%s
)))
代码 2,带有检查变量
@echo off
setlocal EnableDelayedExpansion
for /f "tokens=*" %%s in (selected.txt) do (
cd %~dp0\Melts\MeltNPTdis-8-%%s
for /f "skip=50 tokens=2,7 delims= " %%A in (file.txt) do (
set /a x=0
set /a y=0
if %%A GTR 999 (
set /a x=1
)
if %%B GTR 0.03 (
set /a y=1
)
set /a z= !x! + !y!
if !z! EQU 2 (
cd %~dp0
>>dummy.txt echo %%s
)))
有人能帮我看看这个吗?我已将问题隔离到 IF,并尝试以不同的方式定义变量,例如 %%A 或 %%A%% 无法解决问题。 非常感谢!
【问题讨论】:
-
像 +、- 这样的数字运算符以及 GTR 仅适用于 32 位有符号整数。在您的情况下,
0.03被视为字符串,因此与字符串规则进行比较 -
@jeb 谢谢!我不知道这个,我想我最好用 matlab 代替
标签: if-statement batch-file variables