如何获取相对于工作目录的路径?

How to get path relative to the working directory?

我有一个脚本,它递归循环遍历工作目录和子目录中的所有 .txt 文件,并对这些文件执行一些操作。现在我想排除 exclude.txt 文件中列出的某些子目录中的所有文件:

@ECHO OFF
SETLOCAL EnableDelayedExpansion

for /r %%f in (*.txt) do (
    CALL:processFile %%f %%~df%%~pf
)
GOTO:EOF

:processFile
    SET file_=%~1
    SET path_=%~2                 <- %%~df%%~pf is the full path :(
    find "!path_!" exclude.txt
    IF !ERRORLEVEL! EQU 1 (
        REM do something here
    )
    GOTO:EOF

但是,%%/~df%%~pf 扩展为绝对路径。 如何获取相对于工作目录的路径?我只想列出 exclude.txt 中的子目录,而不是完整路径。

PS:我当然可以从 exclude.txt 中读取相对路径,附加 %cd% 并将它们写入某些 exclude.temp,然后在这个临时文件中搜索,但我希望有更好的方法。

试试这个。

@ECHO OFF
SETLOCAL EnableDelayedExpansion

for /r %%F in (*.txt) do (
    echo %%F|findstr /I /G:exclude.txt >nul 2>&1
    IF NOT "!ERRORLEVEL!"=="0" (
        REM do something here
    )
)

这是一种不同的方法,依赖于 xcopy 能够返回相对路径这一事实。由于我们不想复制任何东西,因此需要使用 /L 开关(列出但不复制)。

for /F "delims=" %%F in ('
    xcopy /L /I /S ".\*.txt" "%TEMP%" ^| find ".\"
') do (
    echo(Relative path to file: "%%~F"

    rem // This block is only needed in case the leading `.\` disturbs:
    set "FILE=%%~F"
    setlocal EnableDelayedExpansion
    echo(Relative path, no `.\`: "!FILE:*.\=!"
    endlocal
)