首页 > 解决方案 > 为什么输出中是当前目录而不是文件的目录?

问题描述

我一定遗漏了一些明显的东西。当前工作目录是C:\src\t\zf. 该DIR命令应该从父目录中获取 .csv 文件,C:\src\t. 我期待%~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"

标签: cmd

解决方案


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

  • 在一个简单的for命令中,可替换参数指的是一个文件/文件夹。
  • 在一个for /f可替换的参数是指一个文本行。

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

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

你可以试试

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

推荐阅读