我是Command脚本的新手,请在下面的问题中提供帮助。
我有以下for循环,它返回C:\test
文件夹及其子文件夹中可用文件的路径。我想要文件路径中的目录路径例如。
如果for循环返回C:\test\scripts\sample.txt
但我只想要C:\test\scripts
。为此我已将下面的命令写到
For /R C:\seq\ %%a IN (*) do (
set filename="%%a"
echo %filename%
)
这不是将文件路径分配给变量文件名,因此我可以从中获取目录路径。请帮助从批处理脚本中的文件路径获取目录路径。
答案 0 :(得分:1)
要获取文件或目录的父目录的路径,请使用~dp
modifier个for
变量引用。如果尾随\
干扰,您可以使用另一个for
循环,如下所示:
for /R "C:\test\scripts" %%I IN ("*.txt") do (
echo Path to parent with trailing `\`: "%%~dpI"
echo Path to parent with trailing `\.`: "%%~dpI."
for /D %%J in ("%%~dpI.") do (
echo Pure path to parent: "%%~fJ"
)
)
我建议不删除sub-string expansion的尾部反斜杠(在循环中执行此操作时需要delayed expansion,正如其他人已经说过的那样),因为那里可能是生成的路径不再指向原始位置的情况。例如,路径D:\
指向驱动器D:
的 root 目录;删除\
后,路径为D:
,指向驱动器的当前目录。使用上述技术可以避免这些问题。
答案 1 :(得分:0)
您只需使用dp
修饰符:
set filename=%%~dpa
此外,对于echo
变量,您需要使用延迟扩展来扩展它:
setlocal enabledelayedexpansion
For /R C:\seq\ %%a IN (*) do (
set filename="%%a"
echo !filename!
)
答案 2 :(得分:0)
For /R C:\seq\ %%a IN (*) do (
set filename="%%~dpa"
call echo %%filename:~0,-1%%
)
请参阅许多有关delayed expansion
的SO文章,了解其他展示filename
的方法。
~dp
指定%%a
的驱动器和路径。
从提示中查看for /?|more
以获取信息
:~0,-1
中的echo
选择最后一个字符
从文档提示
中查看set /?