如何使用批处理文件搜索文件并获取相对文件路径而不是完整路径?

How to search files using batch file and get the relative file path not the full path?

我想在目录中递归搜索扩展名为 .log 的文件。我正在尝试在批处理文件中执行以下命令。

for /R  %%A in (*.log) do echo %%A >> All_logs.txt

我也试过这个:

for /R  %%A in (*.log) do echo %%~nxA >> All_logs.txt

但我要么得到这样的完整路径:

D:\Folder1\sub_folder1\bootmicro.log
D:\Folder1\sub_folder2\debug.log 

bootmicro.log
debug.log

分别

由于我是运行路径D:\Folder1中的批处理文件,我希望搜索结果如下:

sub_folder1\bootmicro.log
sub_folder2\debug.log

此外,在同一个批处理文件中,我想使用生成的文件名创建文件夹,如下所示:

sub_folder1_bootmicro_log_Analysis
sub_folder2_debug_log_Analysis

sub_folder1_bootmicro.log_Analysis
sub_folder2_debug.log_Analysis

我怎样才能做到这一切?

当您使用相对路径调用 xcopy 时,您会得到一个包含相对路径的要复制的文件列表(/l 意味着只获取列表)。

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=1,* delims=\" %%a in ('
        xcopy /l /s .\*.log "%temp%"
    ') do if not "%%b"=="" echo(%%b

for /f 循环将处理列表,删除列表中每个文件的起始 .\(使用反斜杠作为分隔符)。

由于 xcopy 的输出将包含以文件数结尾的行,并且该行不会有第二个标记,因此包含 if 以避免出现空行结束。

已编辑 对于文件夹创建,需要延迟扩展来处理字符串替换,但要防止 ! 包含在任何 [=29] 中出现问题=] 名称,它需要在需要的地方 enabled/disabled。

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=1,* delims=\" %%a in ('
        xcopy /l /s .\*.log "%temp%"
    ') do if not "%%b"=="" (
        echo(%%b
        set "target=%%b"
        setlocal enabledelayedexpansion
        for %%c in ("!target:\=_!") do (
            endlocal
            md "%%~c_Analysis"
        )
    )

与文件类似

for /F "usebackq delims=" %%a in (`forfiles /s /m *.txt /C "cmd /c echo @relpath"`) do (
  set "myfile=%%~a"
  setlocal EnableDelayedExpansion
  set "myfile=!myfile:~2!
  for %%c in ("!myfile:\=_!") do (
    endlocal
    echo md "%%~c_Analysis"
  )
)
Exit /B