PDA

Показать полную графическую версию : [решено] CDROM=%~d0 - Объясните непонятливому, как оно работает, плз. (+)


Mchik
03-03-2005, 15:26
Читал Виндоуз Хэлп. Много думал.
Который раз уже смотрю, что там или очень мало инфы по нужному вопросу или инфа есть, но для юзера - все в общих словах без конкретных примеров и объяснений, зато с красивыми выражениями.
В данном случае я пока лишь только понял, что CDROM=%~d0 нужно принять на веру, и что оно работает.
Но может кто-нибудь все-таки объяснит КАК оно работает? Пример из справки непонятен: CDROM=%~dI, где I - переменная (какая??). Что в данном случае означает нолик? А если я не с компакт-диска хочу это установить а, скажем, с ЮСБ-устройства?

Заранее спасибо.

vserd
03-03-2005, 17:22
Mchik
значит тебе прийдется вырости из юзера в проффесионала, чтобы понимать что скрывается за красивостями, и где брать инфу о нужных командах

Теперь о главном.
mk:@MSITStore:E:\WINNT\Help\ntcmds.chm::/percent.htm

% (Замещаемый параметр)
Замещаемые параметры %0 и от %1 до %9 могут быть помещены в любом месте пакетного файла. При запуске пакетного файла %0 замещается именем пакетного файла, а переменные аргументов с %1 по %9 замещаются соответствующими параметрами, введенными в командной строке.

Например, чтобы скопировать содержимое одной папки в другую, в пакетный файл должна быть добавлена следующая инструкция:

xcopy %1\*.* %2

Для запуска файла введите следующее:

mybatch.bat C:\afolder D:\bfolder.

Результат будет таким же, как и при записи в пакетный файл строки xcopy C:\afolder \*.* D:\bfolder.

Параметр % разворачивает аргументы пакетной программы (%0, %1, ..., %9) как описано ниже:

%* в пакетной программе ссылается на все аргументы. Для отдельных переменных дополнительные возможности описаны в следующих таблицах.

Переменная Описание
%~1 расширение %1, которое удаляет окружающие кавычки (")
%~f1 замена %1 полным путем
%~d1 замена %1 именем диска
%~p1 замена %1 путем
%~n1 замена %1 именем файла
%~x1 замена %1 расширением имени файла
%~s1 замена путем, содержащим только короткие имена.
%~a1 замена %1 атрибутами файла
%~t1 замена %1 временем модификации файла
%~z1 замена %1 размером файла
%~$PATH:1 поиск в каталогах, перечисленных в переменной среды PATH, и замена %1 полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.

Модификаторы могут быть объединены для получения более сложных результатов:

Переменная Описание
%~dp1 замена %1 именем диска и путем
%~nx1 замена %1 именем файла и расширением
%~dp$PATH:1 поиск в каталогах, перечисленных в переменной среды PATH, и замена %1 именем диска и путем к первому найденному файлу.
%~ftza1 замена %1 строкой, аналогичной результату работы программы dir

В приведенных выше примерах %1 и PATH могут быть заменены другими допустимыми значениями. Конструкция %~ должна завершаться допустимым номером аргумента. Модификаторы %~ не могут быть использованы вместе с %*.

из другой части доступных мне знаний, если я правильно путаю, :)) то %0 всегда ссылается на имя программы которую запустили, вместе с полным путем к нему.
отсюда, согласно выше преведенной таблице %~d0 заменяется именем диска из пути где был запущен командный файл.
Проверяем. Создаем командный файл и запускаем его
@Echo off
Echo Full Path= %~0
Echo Disk Letter= %~d0
pause

Вывод. Если хотим получить букву РЕАЛЬНОГО CD-ROM, эту команду нужно выполнять из файла расположеного на CD. Если мы запустим эту конструкцию с любого другого места, то будем удивлены результатами.

также посмотри на команду Set /?

Mchik
03-03-2005, 21:09
Спасибо. Очень доходчиво. Особенно с примером ;)

Vadikan
03-03-2005, 22:29
Oтличное объяснение! :up: Я, пожалуй, сошлюсь на него в статье помимо упоминания команды FOR. Ключевой момент, конечно, %0 всегда ссылается на имя программы которую запустили, вместе с полным путем к нему. отсюда, согласно выше преведенной таблице %~d0 заменяется именем диска из пути где был запущен командный файл.Поэтому такую команду имеет смысл запускать только из файла на CD. Если запустить с логического диска, то переменная %CDROM% будет соответствовать букве этого диска.

vserd
03-03-2005, 23:05
Vadikan
Если будешь ссылаться/цитировать, тогда сразу заменяй
"всегда ссылается на имя программы которую запустили"
на
"всегда ссылается на имя командного файла (.bat, .cmd) который в данный момент исполняется"
чтобы не было непоняток, и не доразумений.

Vadikan
04-03-2005, 01:09
vserd
Я просто дам линк на тему. Можешь исправить пост.

Dirk Diggler
14-07-2006, 19:57
Хотел рандомно задавать значение некоей переменной окружения, для этого использовал вот такие строки(брал размер первого попавшегося файла.

SET hivename=%~z$PATH:0
echo %hivename%

Как можно видеть, в переменную попадает далеко не совсем то, что я ожидал:

55 J:\NEW\autoittropsitory\задать_права_на_реестр.bat
55 - это как раз размер этого батника.
А должно быть, судя по этим строкам:

%~dp$PATH:1 поиск в каталогах, перечисленных в переменной среды PATH, и замена %1 именем диска и путем к первому найденному файлу.

только 55. Что я не понимаю?




© OSzone.net 2001-2012