2

Кто-нибудь из способов получить доступ к файлам и каталогам, которые имеют % в своем имени (который является действительным) из командной строки? В частности, если есть два % и текст между ними соответствует переменной окружения.

Например, если существует файл с именем C:\blah\%temp%.txt или папка с именем C:\Program Files\%temp%\ , ни одно из следующих действий не будет работать, поскольку переменная раскрывается:

> dir "c:\blah\%temp%.txt"
> dir "c:\blah\^%temp^%.txt"
> dir "c:\blah\%%temp%%.txt"
> dir "c:\blah\\%temp\%.txt"

> dir "c:\program files\%temp%"
> dir "c:\program files\^%temp^%"
> dir "c:\program files\%%temp%%"
> dir "c:\program files\\%temp\%"


Использование подстановочных знаков будет работать, но не будет однозначно выбирать файл / папку и может включать другие:

> dir "c:\blah\?temp?.txt"        (also shows ztempz.temp, 1tempa.txt, etc.)
> dir "c:\program files\?temp?"   (likewise)



(Это расстраивает, потому что время от времени - обычно, когда по какой-либо причине перезапускается Explorer - переменные среды перестают расширяться, и в некоторых местах, где они используются, в конечном итоге создаются файлы или каталоги с переменной среды в нем. Например, поскольку я настроил Chromium для хранения своего кэша в подкаталоге %temp% , если переменная расширяется, это нормально, но когда этого не происходит, Chromium создает каталог с именем %temp% в своем собственном каталоге и сохраняет кеш - который может стать большим - там. Я хочу добавить строку в мой скрипт очистки временного / ненужного файла, чтобы автоматически удалить эту папку, если она существует, но я не могу понять, как получить к ней доступ из командной строки, не прибегая к подстановочным знакам.)

2 ответа2

8

Что-то странное случилось со мной, когда я проверял это.

dir "C:\Program Files\^%temp^%"

По какой-то причине кажется, что кавычки мешают побегу. Если я тоже уйду от кавычек, это сработает.

dir ^"C:\Program Files\^%temp^%^"

Это выглядит некрасиво, но это работает.

Если в пути нет пробелов, кавычки не нужны вообще.

0
del c:\a\file^%named^%bob

Доказательство:

C:\lolnope>edit bob

C:\lolnope>move bob bob^%was^%wub
        1 file(s) moved.


C:\lolnopen>dir "bob%was%wub"
 Volume in drive C is OS
 Volume Serial Number is CC34-08D9

 Directory of C:\lolnope

04/06/2012  08:18 PM                15 bob%was%wub
               1 File(s)             15 bytes



C:\lolnope>del bob^%was^%wub

C:\lolnope>dir bob^%was^%wub
 Volume in drive C is OS
 Volume Serial Number is CC34-08D9

 Directory of C:\lolnope

File Not Found

Вы также можете заключить имя файла в двойные кавычки. Это похоже на работу с завершением вкладки в CMD.EXE.

Примечание: я тестировал только на Windows Vista и Windows 7. Это должно работать и для XP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .