首页 > 解决方案 > 如何在目录中循环抛出文件名,然后提取它们的名称以获取 substirng 值

问题描述

因此,我正在遍历目录中的文件并想要获取文件名,当我得到文件名时,我想用 delim 将其分解,因为我将在第一个下划线之前获得名称的第一部分。许多示例将其用于 /f loo[ 与令牌/分隔符设置,但是当我运行此代码时,它表示 i 的回声为:!var!然后当我骑“”我得到系统找不到文件!var!

我猜我的语法不正确,甚至我的脚本方法也是如此。有什么建议么?

@ECHO OFF

for /r %%a in (*.pdf) do (
    echo %%~nxa
    set var=%%~nxa
    
    for /F "tokens=1-2 delims=_" %%i in ("!var!") do (
        echo %%i %%j
    )

)

PAUSE

标签: batch-filecmd

解决方案


可以很容易地找到这些文件,并且使用 PowerShell 使用正则表达式标识前两个部分。PowerShell 在所有受支持的 Microsoft Windows 平台上都可用。PowerShell Core 是 PowerShell 的较新版本,可以在 Linux、Mac 和 Windows 上运行。

Get-ChildItem -File -Recurse -Filter '*.pdf' |
    ForEach-Object {
        Write-Host $_.Name
        if ($_.Name -match '^(.*)_(.*)_.*') {
            Write-Host "$($Matches[1]) $($Matches[2])"
        }
    }

推荐阅读