【问题标题】:Windows batch file extract number from filenameWindows 批处理文件从文件名中提取编号
【发布时间】:2014-12-04 12:55:30
【问题描述】:

我在 Win7 批处理文件中编写了一个for 循环,该循环遍历指定文件夹中的每个文件:

for /f %%f in ('dir /b C:\some_folder') do ( 
    echo %%f
)

文件采用这种格式abc_123_1234567.txt。如何从文件名中提取最后一组数字(即1234567)并将它们放入变量中?

【问题讨论】:

  • 假设有多个文件名匹配 tha 模式。你要哪个号码?模式总是 string_string_stringyouwant.ext 吗?
  • 这个 for 循环将依次遍历每个文件,因此只有一个文件需要考虑从中提取数字。

标签: windows batch-file


【解决方案1】:

您可以使用JREN.BAT 很好地解决这个问题 - 一种混合 JScript/批处理实用程序,它通过执行正则表达式搜索和替换名称来重命名文件。 JREN.BAT 是纯脚本,可​​以在 XP 以后的任何 Windows 机器上本地运行。

我使用/T 测试选项,以便它只列出原始文件和新名称,而不实际进行重命名。然后我使用 FOR /F 解析结果以获取原始名称和提取的数字。它需要一些神秘的语法来将分隔符设置为引号。

@echo off
for /f tokens^=1^,3^ delims^=^" %%A in (
  'jren ".*_\d+_(\d+)\.[^.]*$" "$1" /t /p "C:\some_folder"'
) do (
  echo File=%%A  Number=%%B
)

【讨论】:

  • 我已将$ 附加到搜索词以使解决方案更精确。
【解决方案2】:
for /f "tokens=3delims=_." %%f in ('dir /b C:\some_folder\*') do ( 
    set /a filenum=%%f
    echo %%f
)
echo filenum is %filenum%

只要只有一个文件与您提供的格式匹配

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多