Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
Windows 如何在批处理脚本中从文件路径获取目录路径_Windows_Batch File_Cmd - Fatal编程技术网

Windows 如何在批处理脚本中从文件路径获取目录路径

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,以便我可以从中获取目录路径。

我是非常新的命令脚本,请在下面的问题帮助

下面是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,以便我可以从中获取目录路径。请帮助在批处理脚本中从文件路径获取目录路径。

您只需使用
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%%
)