Пакетная команда FOR не возвращает ожидаемый путь - PullRequest
1 голос
/ 21 марта 2011

Команда FOR в Windows имеет некоторые параметры, которых не было в DOS.В частности, он поддерживает возврат сегментов имени файла следующим образом.

  In addition, substitution of FOR variable references has been enhanced.
  You can now use the following optional syntax:

  %~I         - expands %I removing any surrounding quotes (")
  %~fI        - expands %I to a fully qualified path name
  %~dI        - expands %I to a drive letter only
  %~pI        - expands %I to a path only
  %~nI        - expands %I to a file name only
  %~xI        - expands %I to a file extension only
  %~sI        - expanded path contains short names only
  %~aI        - expands %I to file attributes of file
  %~tI        - expands %I to date/time of file
  %~zI        - expands %I to size of file

Когда я пытаюсь использовать следующую команду, она не работает.Вместо печати \Program Files печатается \.

  for %i in ("%programfiles%") do echo %~pi

Кажется, что только аргумент p неверен, потому что другие аргументы возвращают ожидаемые результаты.

  > for %i in ("%programfiles%") do echo %i
  C:\Program Files

  > for %i in ("%programfiles%") do echo %~i
  C:\Program Files

  > for %i in ("%programfiles%") do echo %~fi
  C:\Program Files

  > for %i in ("%programfiles%") do echo %~is
  C:\PROGRA~1

  > for %i in ("%programfiles%") do echo %~id
  C:

Кто-нибудь знает, в чем может быть проблема?

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Это не проблема, это правильный и ожидаемый результат. ~p извлекает часть пути заданной спецификации файла.

В этом случае

  • c: - привод, возвращаемый %~di;
  • \ - путь, возвращаемый %~pi;
  • Program Files - имя, возвращаемое %~ni;
  • и C:\Program Files - это полная расширенная спецификация файлов, возвращаемая %~fi или %~dpnxi.
0 голосов
/ 21 марта 2011

%~pI - expands %I to a path only

Но предполагается, что% I - это путь + имя файла, поэтому он удаляет последний компонент.

Я протестировал его с файлом C:\temp\two\myFile.txt

для %% I in ("c: \ temp \ two \ myFile.txt") делает эхо% ~ pI
, показывает \temp\two\

Но только для пути
для %% I in ("c: \ temp \ two") выводит эхо% ~ pI
, оно показывает только `\ temp \ '

Но если естьa \ в конце
для %% I in ("c: \ temp \ two") выдает эхо% ~ pI
, это снова показывает \temp\two\

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...