Windows 如何在批处理脚本中从文件路径获取目录路径
我是非常新的命令脚本,请在下面的问题帮助 下面是for循环,它返回Windows 如何在批处理脚本中从文件路径获取目录路径,windows,batch-file,cmd,Windows,Batch File,Cmd,我是非常新的命令脚本,请在下面的问题帮助 下面是for循环,它返回C:\test文件夹及其子文件夹中可用文件的路径。例如,我想要文件路径中的目录路径 If for循环返回C:\test\scripts\sample.txt,但我只想要C:\test\scripts。为此,我写了下面的命令 For /R C:\seq\ %%a IN (*) do ( set filename="%%a" echo %filename% ) 这不是将文件路径分配给变量filename,以便我可以从中获取目录路径。
C:\test
文件夹及其子文件夹中可用文件的路径。例如,我想要文件路径中的目录路径
If for循环返回C:\test\scripts\sample.txt
,但我只想要C:\test\scripts
。为此,我写了下面的命令
For /R C:\seq\ %%a IN (*) do (
set filename="%%a"
echo %filename%
)
这不是将文件路径分配给变量filename,以便我可以从中获取目录路径。请帮助在批处理脚本中从文件路径获取目录路径。您只需使用
dp
修饰符:
set filename=%%~dpa
此外,要echo
变量,您需要使用延迟扩展对其进行扩展:
setlocal enabledelayedexpansion
For /R C:\seq\ %%a IN (*) do (
set filename="%%a"
echo !filename!
)
有关显示文件名的其他方法,请参阅许多关于延迟扩展的文章
~dp
分配%%a的驱动器和路径
有关更多信息,请参见提示符中的
回音中的:~0,-1
选择最后一个字符栏中的所有字符
请参见文档提示中的set/?
要获取文件或目录的父目录的路径,请使用变量引用。如果尾随的\
干扰,您可以对循环使用另一个,如下所示:
对于/R“C:\test\scripts”%%I IN(“*.txt”)do(
到尾随“\`”的父级的回显路径:%%~dpI
到尾随“\.”的父级的回显路径:%%~dpI
对于(“%%~dpI.”中的/D%%J,请执行以下操作(
将纯路径回显到父级:“%%~fJ”
)
)
我建议不要删除后面的反斜杠by(正如其他人已经说过的那样,在循环中执行此操作时需要删除),因为可能会出现结果路径不再指向原始位置的情况。例如,路径D:\
指向驱动器D:
的根目录;删除\
后,路径为D:
,它指向驱动器的当前目录。使用上述技术可避免此类问题。查看以获取/?
,尤其是~
-修饰符
For /R C:\seq\ %%a IN (*) do (
set filename="%%~dpa"
call echo %%filename:~0,-1%%
)