我一定缺少明显的东西。当前工作目录为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:\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"
答案 0 :(得分:1)
for
可替换参数内容所指的是“问题”:
for
命令中,replaceable参数引用文件/文件夹。for /f
中,replaceable参数指向文本行。您处于第二种情况。您的for /f
正在处理文本行。在使用dir /b
时,您只会获得文件的名称和扩展名,而没有使用/s
时才包含的任何路径。
由于for
可替换参数仅包含一个字符串(文件名,而只是一个字符串),因此任何试图获取该字符串中不存在的驱动器或路径(%~dpa
)的操作都将使用当前目录作为信息源。
您可以尝试
for %%a in ("..\*.csv") do (echo "%~fa")