Cmd 为什么输出中是当前目录而不是文件的目录?
我一定错过了什么明显的东西。当前工作目录为C:\src\t\zf。DIR命令应该从父目录C:\src\t获取.csv文件。我希望dpnxa输出文件的完整路径。但事实并非如此。它使用当前工作目录路径并附加文件名。我错过了什么Cmd 为什么输出中是当前目录而不是文件的目录?,cmd,Cmd,我一定错过了什么明显的东西。当前工作目录为C:\src\t\zf。DIR命令应该从父目录C:\src\t获取.csv文件。我希望dpnxa输出文件的完整路径。但事实并非如此。它使用当前工作目录路径并附加文件名。我错过了什么 echo off cd C:\src\t\zf for /f "delims=" %a in ('dir /b "..\*.csv"') do (echo "%~dpnxa") "C:\src\t\zf\Aliases.csv" "C:\src\t\zf\c.csv" "C:
echo off
cd
C:\src\t\zf
for /f "delims=" %a in ('dir /b "..\*.csv"') do (echo "%~dpnxa")
"C:\src\t\zf\Aliases.csv"
"C:\src\t\zf\c.csv"
"C:\src\t\zf\iplist.csv"
"C:\src\t\zf\my.csv"
"C:\src\t\zf\original.csv"
"C:\src\t\zf\original2.csv"
"C:\src\t\zf\original3.csv"
"C:\src\t\zf\output.csv"
"C:\src\t\zf\rearrange.csv"
"C:\src\t\zf\rearrange-out.csv"
问题在于可替换参数内容所指的内容:
在简单for命令中,可替换参数指的是文件/文件夹。
在for/f中,可替换参数指的是文本行。
第二种情况是你。您的for/f正在处理文本行。当您使用dir/b时,您只会获得文件的名称和扩展名,而不包括任何仅在使用/s时才包含的路径
由于for replacement参数仅包含一个字符串(文件名),而仅包含一个字符串,因此任何试图获取字符串中不存在的驱动器或路径%dpa的操作都将使用当前目录作为信息源
你可以试试看
for %%a in ("..\*.csv") do (echo "%~fa")
对于'dir/b..\\*.csv'中的/f delims=%a,执行echo%~dpnxa