为什么当前目录在输出中而不是文件目录中?

时间:2018-08-24 16:27:45

标签: cmd

我一定缺少明显的东西。当前工作目录为C:\src\t\zfDIR命令应从父目录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"

1 个答案:

答案 0 :(得分:1)

for可替换参数内容所指的是“问题”:

  • 在简单的for命令中,replaceable参数引用文件/文件夹。
  • for /f中,replaceable参数指向文本行。

您处于第二种情况。您的for /f正在处理文本行。在使用dir /b时,您只会获得文件的名称和扩展名,而没有使用/s时才包含的任何路径。

由于for可替换参数仅包含一个字符串(文件名,而只是一个字符串),因此任何试图获取该字符串中不存在的驱动器或路径(%~dpa)的操作都将使用当前目录作为信息源。

您可以尝试

for %%a in ("..\*.csv") do (echo "%~fa")