我现在谈到我在这篇文章中提到的更大问题...... Searching a text file and sending only numbers greater than a certain absolute value to text file?
我认为如果我set num=!num:-=!
的原始值为-17
,那么!errorlevel!
会评估为真或0
对吗?有些东西不在这里工作......
为了澄清,我只需要过滤掉第四个令牌大于3或小于-3的第一和第四个令牌,以及任何没有第四个令牌的行(此部分)解决了)。我尝试过使用set的/A
选项,它似乎仍无法正常工作。
setlocal enabledelayedexpansion
set "min=-"
for /f "tokens=1,4" %%a in ('findstr /b /r /c:"[^ ]*:S:" print.log') do (
if %%b=="" (echo %%a ^*^*^* >>new.txt) else (
set num="%%b"
set num=!num:-=!
if !errorlevel!==0 (
if !num! GTR 3 echo %%a !min!!num! >> new.txt
) else (
if !num! GTR 3 echo %%a !num! >> new.txt
)
)
)
exit /b
print.log
中的文字如下:
ksdf 0 0 -4
as7d:S:asf 0 0 -4
kc:S:cd3 0 0 -2
asdk:S:s 0 0 6
lasd:S:dd 0 0
答案 0 :(得分:2)
@echo off
setlocal enableextensions disabledelayedexpansion
>"new.txt" (
for /f "tokens=1,4" %%a in ('
findstr /b /r /c:"[^ ]*:S:" print.log
') do if "%%~b"=="" (echo %%a ***) else (
set "print=1"
if %%b lss 4 if %%b gtr -4 set "print="
if defined print echo %%a %%b
)
)
当值低于-3或大于3时,不会打印,当值低于4且大于-4时,不会打印
-6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6
^.................^
don't print
答案 1 :(得分:0)
set /A num=%%b
set num=!num:-=!
这将num
确定为%%b
的算术值。请注意,环境变量始终字符串。分配根据需要以单向方式进行转换。您的作业将指定一个值(例如)"-4"
(包括引号)
第二个命令使用num
中的字符串并将所有-
更改为*nothing*
,因此计算absolte值,假设它是适当的{{1}结构。
除此之外,我不知道你的意图是什么来创建你的输出,因为你没有说明输出应该是什么。无论哪种方式,-number
都不会受到errorlevel
AFAIAA的影响。
请注意,set
仍会包含您使用%%b
时所读取的原始数字。您可以在echo
以及if
上执行%%b
,并根据需要在!num!
中使用%%b
或!num!
。
您没有说明您的echo
业务的目的是什么......
gtr 3
您需要更改@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q42639932.txt"
FOR /f "tokens=1,4" %%a IN ('findstr /b /r /c:"[^ ]*:S:" "%filename1%"') DO (
if "%%b"=="" (echo %%a ^*^*^*) else (
set num=%%b
set num=!num:-=!
if !num! GTR 3 (echo %%a %%b
) else (
ECHO just FOR demo %%a %%b
)
)
)
GOTO :EOF
的设置以适合您的具体情况。
我使用了一个名为sourcedir
的文件,其中包含我的测试数据+附加内容。
对于通过q42639932.txt
过滤器的每一行,如果缺少column4,则生成星号,然后将findstr
设置为num
中的值,并从中删除任何%%b
。如果结果数字> 3,则回显原始-
- 好吧,我已经为完整性生成了报告行。显然,这可以是%%b
。
答案 2 :(得分:0)
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
set "threshold=3"
>new.txt (
for /f "tokens=1,4" %%a in ('findstr /b /r /c:"[^ ]*:S:" print.log') do (
if "%%b"=="" (
echo %%a ^*^*^*
) else (
set /A num=%%b
if !num! GEQ 0 (
set "min="
) else (
set "num=!num:-=!"
set "min=-"
)
if !num! GTR %threshold% echo %%a !min!!num!
)
)
)