Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理-从目录返回完整路径/b_Batch File - Fatal编程技术网

Batch file 批处理-从目录返回完整路径/b

Batch file 批处理-从目录返回完整路径/b,batch-file,Batch File,我正在遍历驱动器上的文件夹,收集具有特定扩展名的文件名,并生成一个字符串,该字符串稍后将在命令行开关中使用。当我找到一个符合条件的文件时,我需要知道它的完整路径,因为这是命令行所要求的。我目前使用“%~dp0%%a\%%b”构建完整路径,但我可以看到,当批处理变得更复杂时(例如,它深入子文件夹),这可能会有限制。我希望有一种方法可以将“%~dp0%%a\%%b”替换为定位文件的路径。谢谢各位: @ECHO OFF for /f "usebackq tokens=*" %%a in (`dir /

我正在遍历驱动器上的文件夹,收集具有特定扩展名的文件名,并生成一个字符串,该字符串稍后将在命令行开关中使用。当我找到一个符合条件的文件时,我需要知道它的完整路径,因为这是命令行所要求的。我目前使用“%~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

为什么需要创建两个循环,每个循环运行
dir
命令来查找文件?为什么不直接执行
for/R
循环?以下是一个例子:

@echo off
set "files=*.E01 *.L01 *.AD"
for /R %%a in (%files%) do echo %%a
只需使用DIR-命令的“Sub”选项:/S

Dir /B /S C:\*.jpg
因为它相当于:

@echo off
 set "DirPath=C:\"
 set "files=*.jpg"
 for /R %DirPath% %%a in (%files%) do echo %%a
因此,您应该在每个脚本中得到相同的结果。

问题是:如果你不想要任何深度的子目录,您必须过滤掉这些,因此您可能会在这两种解决方案中浪费时间。

根据目录深度,您可以轻松达到8192个字符的命令行长度限制
cmd.exe
,如果您的命令行需要完整路径,则无法不提供完整路径!如果您提供更多信息和实际命令,而不是一些隐藏的、秘密的或通用的示例,也许有人可以提供一个合理的特定于此的工作解决方案。那么是什么阻止您将命令修饰符与
FOR
变量一起使用呢?