批处理脚本编程:将 txt 文件中的行值保存到变量中



我想读取一个文本文件,其中每行都有一个数字。负数需要替换为 0,并与其余正数一起写入新文件。

问题是我想将一行的值(即 %%a(保存到一个新变量中。然后我将检查该变量的第一个字符是否为"-"如果是,我将在最终文件中将该行的值设置为 0,否则,它将保持原样。

但是我无法将行值保存到任何内容中。下面是我的代码。 3.txt是原始文件,临时文件.txt是最终文件。

set filem=3.txt
set tempfile=tempfile.txt
for /f "tokens=*" %%a in (%filem%) do (
set linevalue=%%a
IF %linevalue:~0,1% EQU - (
echo 0>>%tempfile%
) ELSE (
echo %%a>>%tempfile%
)
)
pause

如果你的数字真的是整数,你可以试试下面的方法:

@Echo Off
Set "filem=3.txt"
Set "tempfile=tempfile.txt"
If Exist "%filem%" (
(   For /F "Tokens=1* Delims=]" %%G In (
'""%__AppDir__%find.exe" /N /V ""<"%filem%""'
) Do If "%%H" == "" (
Echo=%%H
) Else (
If %%H Lss 0 (
Echo 0
) Else Echo %%H
)
)>"%tempfile%"
)
Pause

如果它们是浮点数,您将在同一代码块中设置和使用变量,因此您需要使用延迟扩展(代码中缺少(:

@Echo Off
SetLocal DisableDelayedExpansion
Set "filem=3.txt"
Set "tempfile=tempfile.txt"
If Exist "%filem%" (
(   For /F "Tokens=1* Delims=]" %%G In (
'""%__AppDir__%find.exe" /N /V ""<"%filem%""'
) Do If "%%H" == "" (
Echo=%%H
) Else (
Set "LineVal=%%H"
SetLocal EnableDelayedExpansion
If "!LineVal:~,1!" == "-" (
Echo 0
) Else Echo %%H
EndLocal
)
)>"%tempfile%"
)
Pause

我假设您将在与代码文件相同的目录/文件夹中运行bat/cmd,否则,请编辑添加文件的完整/完整文件夹cd /d "%~dp0"


@echo off 
cd /d "%~dp0"
set "filem=.3.txt"
type nul >".tempfile.txt"
set "tempfile=.tempfile.txt"
for /f "tokens=1*" %%a in ('type "%filem%"')do (
echo["%%~a"|%__APPDIR__%findstr.exe -[0-9] >nul && (
echo[0>>"%tempfile%" ) || ( echo/%%~a%%b>>"%tempfile%" )
)
goto :EOF

最新更新