1

我想在目录中递归搜索扩展名为.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

我怎么能做到这一切?

4

2 回答 2

3

当您使用相对路径调用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已包含 以避免在末尾出现空行。

编辑对于文件夹创建,需要延迟扩展来处理字符串替换,但为了防止!包含在任何文件/文件夹名称中的问题,需要在需要时启用/禁用它。

@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"
        )
    )
于 2015-09-14T09:12:04.903 回答
0

与 forfiles 类似

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
于 2015-09-14T17:23:28.923 回答