如何使用批处理文件搜索文件并获取相对文件路径而不是完整路径?
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
我想在目录中递归搜索扩展名为 .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