我正在遍历驱动器上的文件夹,收集具有特定扩展名的文件名,以及构建稍后在命令行开关中使用的字符串。当我找到符合条件的文件时,我需要知道它的完整路径,因为这是命令行所需要的。我目前使用"%~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
答案 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:
的“子”选项- / SDir /B /S C:\*.jpg
因为它等同于:
@echo off
set "DirPath=C:\"
set "files=*.jpg"
for /R %DirPath% %%a in (%files%) do echo %%a
,因此在每个脚本中应该得到相同的结果。
问题:如果您不希望深入了解SubDirectory,则必须过滤掉这些子目录,这样可能会浪费时间-在两种解决方案中。