从命令提示符

时间:2015-09-21 09:57:44

标签: batch-file cmd command command-prompt

我想根据模式在目录中搜索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可以是任何随机数而且它们不是固定的。 感谢

2 个答案:

答案 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