我想根据模式在目录中搜索zip文件,并且必须在.txt文件中列出 例如我有abc.zip和abc123.zip(123可以是任意随机数) 我的代码
For %%F in [fullpath]\abc*.zip Do @Echo %%~ftF>> test.txt
(附在批处理文件中) 给我输出
[modified date][fullpath]abc.zip
[modified date][fullpath]abc123.zip
现在扭曲的是,我只想列出来 abc123.zip 并不是 abc.zip 而且我不能给出像abc123 * .zip这样的模式,因为123可以是任何随机数而且它们不是固定的。 感谢
答案 0 :(得分:1)
您可以尝试使用数字作为分隔符来分割文件名,尝试获取第二个标记。如果找不到,则内部do
的{{1}}子句将不会被执行
for
注意:为了以后可以替换@echo off
setlocal enableextensions disabledelayedexpansion
for %%a in (abc*.zip) do (
for /f "tokens=2 delims=0123456789" %%b in ("x%%~nxa") do @echo %%~fta
)
,文件名中包含abc*.zip
(可以是任何非数字字符)来处理内部x
循环。包含它是为了正确处理文件名中只包含数字的文件。
已编辑 - 由于似乎只应匹配特定的文件模式,因此代码会略有变化
for
也就是说,我们仍然使用内部@echo off
setlocal enableextensions disabledelayedexpansion
for %%a in (customer*.zip) do (
for /f "tokens=1,2 delims=0123456789" %%b in ("%%~nxa") do (
if /i "%%b"=="customer" if /i "%%c"==".zip" @echo %%~fta
)
)
来删除文件名以删除数字,但现在我们检索两个令牌并检查第一个是否是搜索到的名称,第二个是否只是扩展名,如果我们删除匹配文件中间的所有数字,那么应该保留的两个元素。
或者,性能较低(子shell和管道创建比字符串直接标记化更慢)但更容易阅读
for
这使用@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('
dir /b /a-d customer*.zip
^| findstr /r /x /i /c:"customer[0-9][0-9]*\.zip"
') do echo %%~fta
命令列出文件,dir
列出文件列表,只检索与指定模式匹配的文件。
答案 1 :(得分:1)
@echo off
setlocal enabledelayedexpansion
(
for /f "delims=" %%i in ('dir /b /a-d abc*.zip ^|findstr /r [0-9]') do ( set file=%%i
echo !file!
)
)>test.txt
type test.txt | more
exit /b 0