cmd - 为什么输出中是当前目录而不是文件的目录?
问题描述
我一定遗漏了一些明显的东西。当前工作目录是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"
解决方案
“问题”是for
可替换参数内容所指的:
- 在一个简单的
for
命令中,可替换参数指的是一个文件/文件夹。 - 在一个
for /f
可替换的参数是指一个文本行。
而你属于第二种情况。您for /f
正在处理文本行。当您使用 adir /b
时,您只会获得文件的名称和扩展名,而没有任何仅在使用时才包含的路径/s
。
由于for
可替换参数只包含一个字符串(文件名,但只是一个字符串),任何试图获取%~dpa
字符串中不存在的驱动器或路径( )的操作都将使用当前目录作为信息源。
你可以试试
for %%a in ("..\*.csv") do (echo "%~fa")
推荐阅读
- c - 更改函数中整数的值
- node.js - ReferenceError:未定义 WebAssembly
- node.js - 如何修改响应头?
- javascript - 如何在 Chrome 扩展中使用 MediaDevices.getUserMedia 请求访问音频流时更改 url 或站点名称
- c++ - C ++如何将一行HEX传递给字符串?
- python - 在 python 中使用多个分隔符解析 csv
- sql-server - 将 MS Access TRANSFORM/PIVOT 查询转换为 SQL Server
- differential-equations - 如何求解混合微分方程?或者如何在第一次迭代中分配 dPsdt = o 并在迭代后获得值
- c - 为什么第五个数据不起作用? fscanf() 有问题吗?
- ruby-on-rails - 带有 Webpacker 的 Rails Bootstrap 3 - 下拉菜单不起作用