Почему текущий каталог в выводе, а не каталог файла? - PullRequest
0 голосов
/ 24 августа 2018

Я, должно быть, упускаю что-то очевидное.Текущий рабочий каталог 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"

1 Ответ

0 голосов
/ 24 августа 2018

«Проблема» - это то, к чему относится содержимое заменяемого параметра for:

  • В простой команде for заменяемый параметр относится к файлу / папке.
  • В for /f заменяемый параметр относится к текстовой строке.

И вы во втором случае. Ваш for /f обрабатывает текстовые строки. Поскольку вы используете dir /b, вы получаете только имя и расширение файлов, без указания пути, который указывается только при использовании /s.

Поскольку заменяемый параметр for содержит только строку (имя файла, но только строку), любая операция, пытающаяся получить диск или путь (%~dpa), отсутствующий в строке, будет использовать текущий каталог как источник информации.

Вы можете попробовать с

for %%a in ("..\*.csv") do (echo "%~fa")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...