如何获取Bat中文件的完整路径



有这样一个问题。在bat文件中,我需要显示文件的路径:要么来自当前目录,要么来自path。基本上,一切都对我有效,但当在path中写入相对路径时,脚本就会中断。例如:这里是Path:";一C: \dev"。这两个文件夹都包含1.exe文件。我的脚本将显示以下结果:

C:dev1.exe
a1.exe

我需要第二行中文件的完整路径。我知道有一些修饰符,比如%~dp1,但如果文件名由几个单词组成,那么我就不能使用这样的构造,因为%~dp*不起作用。一般来说,问题的要点是:如何在bat中获得文件的完整路径?我想用这个:

set mac=%path%
:m1
if "%mac%" neq "" (
for /F "tokens=1,* delims=;" %%i in ("%mac%") do (
if exist "%%i%arg%" (
set chunk="%%i"
set chunk=%chunk:~2,2%
if "%chunk%"==":" (
echo %%i%arg%
) else (
echo %~dp0%%i%arg%
)
set bool=1
) else (
for %%a in (%pathext%) do (
if exist "%%i%arg%%%a" (
set chunk="%%i"
set chunk=%chunk:~2,2%
if "%chunk%"==":" (
echo %%i%arg%%%a
) else (
echo %~dp0%%i%arg%%%a
)
set bool=1
)
)
)
set mac=%%j
goto m1
)

但它不起作用:(我的任务-做模拟哪里

根据您提供但已更正的示例字符串a; C:dev,并且正如您在评论中特别提到的,修饰符不起作用,下面的示例表明它们起作用:

@For %%G in (a; C:dev) Do @Echo %%~fG

上面应该向您展示了它将当前目录作为完整路径添加到您的第一个字符串a中。


例如,由于您没有直接解释脚本应该做什么,(或在问题正文中包含任何内容(,并且您提供的示例字符串已经包含无效或额外的空格,如果您有以下a;C:dev,则将这两个位置的所有.exe文件的名称作为完整路径返回,(根据请求插入当前目录(,我会使用这个:

@%SystemRoot%System32where.exe "a;C:dev":"*.exe" 2>NUL

同样,如果您只查找名为1.exe:的文件

@%SystemRoot%System32where.exe "a;C:dev":"1.exe" 2>NUL

最新更新