【问题标题】:searching a filename having number in it from command prompt从命令提示符搜索包含数字的文件名
【发布时间】:2015-09-21 09:57:44
【问题描述】:

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

【问题讨论】:

  • @BobbyJack 不,是cmd(通常被错误地称为“DOS 窗口”)

标签: batch-file cmd command command-prompt


【解决方案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

【讨论】:

  • 你不需要临时变量file,因此你也不需要延迟扩展...
  • @aschipfl 你是对的。以防万一需要使用 substring :)
【解决方案2】:

您可以尝试使用数字作为分隔符来拆分文件名,尝试获取第二个标记。如果没有找到,内部fordo子句将不会被执行

@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(可以是任何非数字字符)以供内部@987654326 处理@ 环形。包含它以正确处理文件名中只有数字的文件。

已编辑 - 由于似乎只应匹配特定的文件模式,因此代码略有变化

@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
        )
    )

也就是说,我们仍然使用内部for 来破坏文件名以删除数字,但是现在我们检索两个标记并检查第一个是否是搜索的名称,第二个是否只是扩展名,这两个如果我们删除匹配文件中间的所有数字,应该保留的元素。

或者,性能较低(子shell和管道创建比直接对字符串进行标记化要慢)但更容易阅读

@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 命令列出文件并使用findstr 归档列表并仅检索与指定模式匹配的文件。

【讨论】:

  • 我们可以再次扭曲这个以将文件分开为 abc123.zip 和 abcde123.zip 吗?好像我的第一行是搜索 abcde*.zip,那么我会得到 abcde123.zip 的结果,如果我搜索 abc*.zip,我会得到两个文件名,但我的意图只是得到 abc123.zip 而不是 abcde123。压缩?上面的逻辑只检查第二部分中的数字,但是如果两个文件都有一个数字,因为两个文件都附加了日期和时间戳,在这种情况下,上述条件可能会失败。
  • @user2409235,可能是。应该处理什么文件?您是abc123.zip 感兴趣(是的,数字可以更改)还是有其他模式需要处理?
  • 我有 customer010715013210.zip 和 customer_assign010715013210.zip 文件名,我想将这两个分开。我不能给客户*.zip,因为它会列出两个文件,它不应该给第二个文件。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2012-02-12
相关资源
最近更新 更多