我不知道关于批处理脚本的任何,但我必须完成一项任务。 在档案中
123abc.txt
456def.txt
789ggg.txt
我必须从文件名中提取初始数字部分,并仅在数字高于给定基数时处理文件。
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的值总是随机的,它似乎总是设置为它找到的第一个值。
有人可以帮我示例吗?
非常感谢。
答案 0 :(得分:0)
每当您更改闭合的括号内的变量值时,您必须
1)将setlocal EnableDelayedExpansion
放在脚本的开头(常用位置在@echo off
行下方)和
2)将%num%
更改为!num!
。
需要延迟,因为if语句的整个块是一次计算的 - >在没有延迟扩张的情况下改变一个值将不会被视为之前计算过的 如果延迟扩展,你告诉程序,它必须在到达那里时再次计算这个部分。
虽然你对批处理脚本没有任何了解,但我相信你能做到!想一想您的程序必须遵循的逻辑,然后搜索如何批量实现它的每个部分。
答案 1 :(得分:0)
除了geisterfurz007之外,还有一个问题是你不能简单地 SSLContextBuilder sslcontext = new SSLContextBuilder();
sslcontext.loadTrustMaterial(null, new TrustSelfSignedStrategy());
httpclient = HttpAsyncClients.custom().setSSLContext(sslcontext.build()).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.build();
包含字母的var到另一个var中。如果该行始终以数字开头,则可以将所有字母作为分隔符,从而将其剪掉。而不是使用延迟扩展你可以使用伪调用,但必须加倍百分号。
set /a
Output The number part is: 123 The number part is: 456 The number part is: 789
修改或者更好地执行
(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
)
答案 2 :(得分:0)
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"
)
可悲的是,有一些重要的事情你还没有告诉我们。这些文件的具体形式是3digits-three-letters.txt吗? vers
的长度是否始终与前导数字字符串的长度相同?
如果是这样,以上内容利用了ASCII顺序 - 第一个字母必须是< A
和> '0'(只允许数字),所以我们检测到一个数字领导者。如果具有数字前导的所有文件具有相同的长度前导,则ASCII顺序就足够了。
但是 - 这只是猜测。需要有关文件和vers