Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
Cmd 为什么输出中是当前目录而不是文件的目录?_Cmd - Fatal编程技术网

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

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:

我一定错过了什么明显的东西。当前工作目录为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"
问题在于可替换参数内容所指的内容:

在简单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