Batch file 使用批处理(windows)从文件名中提取数字
我对批处理脚本一无所知,但我必须完成一项任务。 归档 我必须从文件名中提取初始数字部分,并且仅当数字高于给定的基数时才处理该文件Batch file 使用批处理(windows)从文件名中提取数字,batch-file,windows-scripting,Batch File,Windows Scripting,我对批处理脚本一无所知,但我必须完成一项任务。 归档 我必须从文件名中提取初始数字部分,并且仅当数字高于给定的基数时才处理该文件 for /F "tokens=*" %%f in (%TEMP%\out.tmp) do ( set "var=%%f" & set /A "num=var" echo %num% rem if %num% GEQ %vers% do something ) num的值总是随机的,似乎总是设置为它找到的第一个值 有人能帮我举个例子吗
for /F "tokens=*" %%f in (%TEMP%\out.tmp) do (
set "var=%%f" & set /A "num=var"
echo %num%
rem if %num% GEQ %vers% do something
)
num的值总是随机的,似乎总是设置为它找到的第一个值
有人能帮我举个例子吗
非常感谢。看一看
每当您在一个封闭的圆括号内更改一个变量的值时,您必须
1) 将setlocal EnableDelayedExpansion
放在脚本开头(公共位置在@echo off
行下方)和2) 将
%num%
更改为!嗯代码>
需要延迟,因为if语句的整个块是一次性计算的->在没有延迟扩展的情况下更改内的值不会被视为以前计算的值。
对于延迟扩展,但是你告诉程序,当它到达那里时,它必须再次计算这个部分
即使你对批处理脚本一无所知,我相信你也能做到!想一想你的程序必须遵循的逻辑,然后搜索如何成批实现它的每个单独部分。看看
每当您在一个封闭的圆括号内更改一个变量的值时,您必须
1) 将setlocal EnableDelayedExpansion
放在脚本开头(公共位置在@echo off
行下方)和
2) 将%num%
更改为!嗯代码>
需要延迟,因为if语句的整个块是一次性计算的->在没有延迟扩展的情况下更改内的值不会被视为以前计算的值。
对于延迟扩展,但是你告诉程序,当它到达那里时,它必须再次计算这个部分
即使你对批处理脚本一无所知,我相信你也能做到!想一想你的程序必须遵循的逻辑,然后搜索如何成批实现它的每个单独部分。除了geisterfurz007点之外,还有一个问题,你不能简单地将/a
一个包含字母的变量设置为另一个变量。如果行总是以数字开头,你可以将所有字母作为分隔符就这样把他们切断了。而不是使用延迟扩展,您可以使用伪调用,但必须将百分比符号加倍
(Echo 123abc.txt
Echo 456def.txt
Echo 789ggg.txt
) >%TEMP%\out.tmp
Echo off
for /F "delims=abcdefghijklmnopqrstuvwxyz" %%f in (%TEMP%\out.tmp) do (
set "var=%%f"
call set /A "num=%%var%%"
call echo The number part is: %%num%%
rem if %num% GEQ %vers% do something
)
除了geisterfurz007点之外,还有一个问题,即您不能简单地将/a
包含字母的变量设置为另一个变量。如果行始终以数字开头,您可以将所有字母作为分隔符,从而将其截断。而不是使用延迟扩展,您可以使用伪调用,但必须将百分比符号加倍
(Echo 123abc.txt
Echo 456def.txt
Echo 789ggg.txt
) >%TEMP%\out.tmp
Echo off
for /F "delims=abcdefghijklmnopqrstuvwxyz" %%f in (%TEMP%\out.tmp) do (
set "var=%%f"
call set /A "num=%%var%%"
call echo The number part is: %%num%%
rem if %num% GEQ %vers% do something
)
遗憾的是,有许多重要的事情你没有告诉我们。文件的格式是否为3digits-three-letters.txt?vers
是否始终与前导数字字符串的长度相同
如果是这样的话,上面利用了ASCII顺序-第一个字母必须是“0”(只允许数字),因此我们检测到一个数字前导。如果所有具有数字引线的文件都具有相同长度的引线,则ASCII顺序就足够了
但是,这只是一个猜测。需要有关文件和版本的更多信息
遗憾的是,有许多重要的事情你没有告诉我们。文件的格式是否为3digits-three-letters.txt?vers
是否始终与前导数字字符串的长度相同
如果是这样的话,上面利用了ASCII顺序-第一个字母必须是“0”(只允许数字),因此我们检测到一个数字前导。如果所有具有数字引线的文件都具有相同长度的引线,则ASCII顺序就足够了
但是,这只是一个猜测。需要有关文件和版本的更多信息
Output
The number part is: 123
The number part is: 456
The number part is: 789
for /F "delims=abcdefghijklmnopqrstuvwxyz" %%f in (%TEMP%\out.tmp
) do if %%f GEQ %vers% do something
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\*.txt" '
) DO (
IF /i "a" gtr "%%a" IF "%%a" geq "0" IF "%%a" gtr "%vers%" ECHO DO something with "%%a"
)