批处理 - 从dir / b返回完整路径

时间:2018-05-03 14:28:38

标签: batch-file

我正在遍历驱动器上的文件夹,收集具有特定扩展名的文件名,以及构建稍后在命令行开关中使用的字符串。当我找到符合条件的文件时,我需要知道它的完整路径,因为这是命令行所需要的。我目前使用"%~dp0 %% a \ %% b"构建完整路径,但我可以看到,当批处理变得更复杂时(例如,它深入到子文件夹中)可能会有限制。我希望有一种方法可以替换"%~dp0 %% a \ %% b"与定位文件的路径。谢谢你:

@ECHO OFF
for /f "usebackq tokens=*" %%a in (`dir /b /a:d`) do (
pushd %%a
setlocal ENABLEDELAYEDEXPANSION 
for /f "delims=" %%b in ('dir /b "*.E01" "*.L01" "*.AD1" 2^>nul') do (
SET EVIDENCE_STR=!EVIDENCE_STR! /e:"%~dp0%%a\%%b"
)
IF DEFINED EVIDENCE_STR (
ECHO !EVIDENCE_STR!
) ELSE (
ECHO No evidence files located in: %%a 
)   
endlocal
SET EVIDENCE_STR=
popd
)
PAUSE

2 个答案:

答案 0 :(得分:3)

为什么需要创建2个循环,每个循环运行dir命令来查找文件?为什么不进行for /R循环?这是一个例子:

@echo off
set "files=*.E01 *.L01 *.AD"
for /R %%a in (%files%) do echo %%a

答案 1 :(得分:0)

只需使用 DIR -Command:

的“子”选项- / S
Dir /B /S C:\*.jpg

因为它等同于:

@echo off
 set "DirPath=C:\"
 set "files=*.jpg"
 for /R %DirPath% %%a in (%files%) do echo %%a

,因此在每个脚本中应该得到相同的结果。
问题:如果您不希望深入了解SubDirectory,则必须过滤掉这些子目录,这样可能会浪费时间-在两种解决方案中。