Теперь я хочу получить .batфайл, получающий параметр, который выполняет это предложение. Например, выполнение regadd.bat myapp.exeбудет делать это. Какой должна быть строка в .batфайле?
Очки:
Как включить параметр,
Как включить параметр с .exeудаленным (для части каталога),
Как избежать расширения, %1которое входит в реестр (я не знаю, как избежать его надлежащим образом).
Я нашел много ресурсов (например, Как использовать `%` в командном файле ), но я не хотел бы возиться с реестром. Моя ставка на 1 и 3 (все равно придется отработать 2):
command line: to avoid expanding %MYAPPSDIR% by command line interpreter, the % percent character should be escaped by the standard CLI escape character (^ caret): ^%MYAPPSDIR^% or ^%1;
.bat script: to avoid expanding %MYAPPSDIR% or %1 by batch interpreter, the % percent character should be doubled as follows: %%MYAPPSDIR%% and %%1, respectively.
To distinguish parameters supplied to your batch script:
set "par1=%~1" if "%par1%"=="" ( echo no parameter supplied goto :eof ) else ( set "par=%par1:.exe=%" ) if "%par%"=="%par1%" ( echo .exe not present ) else ( echo .exe present )
or (maybe better)
set "par1=%~1" if "%par1%"=="" ( echo no parameter supplied goto :eof ) else ( set "par=%par1:~-4%" ) if /I "%par%"==".exe" ( echo .exe present ) else ( echo .exe not present )
or (maybe the best)
set "par1=%~1" if "%par1%"=="" ( echo no parameter supplied goto :eof ) else ( set "par=%~x1" ) if /I "%par%"==".exe" ( echo .exe present ) else ( echo .exe not present )
Благодарю. Как насчет пункта 2?
sancho.s 9 лет назад
0
@ sancho.s Использовать `% ~ n1` - расширяет`% 1` до имени файла без расширения файла. См. [Аргументы командной строки (параметры)] (http://ss64.com/nt/syntax-args.html) для этого и других расширений параметров.
DavidPostill 9 лет назад
1
Очень подробный ответ! Я проверю варианты и оставлю отзыв.
sancho.s 9 лет назад
0
Отзыв № 1: Я не знаю, почему вы установили 3 уровня «достоинства» для своих решений (возможно, вы могли бы прокомментировать причины). Во всяком случае, для предполагаемого использования, как было опубликовано в OP, я обнаружил, что первый из них полезен, поскольку он позволяет извлекать имя приложения без .exe для дальнейшего использования. Следующие две альтернативы только определяют наличие .exe, но не изолируют имя приложения.
sancho.s 9 лет назад
0
@DavidPostill - Ваш комментарий заслуживает ответа.
sancho.s 9 лет назад
0
Ниже я добавил краткий ответ с соответствующей строкой кода, http://superuser.com/a/947474/245595.
sancho.s 9 лет назад
0
1
DavidPostill
Как мне использовать параметр с удаленным .exe (для части каталога)?
Вы можете использовать %~n1.
Это расширяется %1до имени файла без расширения файла.
Расширения параметров
Когда аргумент используется для указания имени файла, может применяться следующий расширенный синтаксис:
Мы используем переменную% 1 (но это работает для любого параметра)
%~f1 - Разверните% 1 до полного имени пути - C: \ utils \ MyFile.txt
%~d1 - Развернуть% 1 только до буквы диска - C:
%~p1 - Развернуть% 1 до пути только, например, \ utils \, включая завершающий символ \, который будет интерпретирован как управляющий символ некоторыми командами.
%~n1 - Разверните% 1 до имени файла без расширения файла C: \ utils \ MyFile или, если присутствует только путь (без обратной косой черты) - последняя папка в этом пути.
%~x1 - Развернуть% 1 только до файла eXtension - .txt
%~s1 - Измените значения f, n, s и x для ссылки на короткое имя 8.3 (если оно существует).
%~1 - Разверните% 1, удалив все окружающие кавычки (")
%~a1 - Показать атрибуты файла% 1
%~t1 - Показать дату / время% 1
%~z1 - Показать размер файла% 1
%~$PATH:1 - Найдите переменную среды PATH и разверните% 1 до полного имени первого найденного соответствия.
Модификаторы выше могут быть объединены:
%~dp1 - Развернуть% 1 только до буквы и пути к диску
%~sp1 - Расширить% 1 до пути, сокращенного до 8,3 символа.
%~nx2 - Развернуть% 2 только до имени и расширения файла
параметры - аргумент командной строки (или параметр) - это любое значение, переданное в пакетный скрипт.
0
sancho.s
Я отвечу на конкретный вопрос: какой должна быть строка в .batфайле? , который был разделен на 3 необходимых шага.
JosefZ ответил отдельно на 3 пункта, которые привели к ответу. ДэвидПостилл дал еще один вариант для пункта 2.
Полученный код будет
set "app1=%~1" if "%app1%"=="" ( echo No parameter supplied. This should be run as echo regadd.bat myapp.exe echo or echo regadd.bat myapp goto :eof ) else ( REM set "app=%app1:.exe=%" set "app=%~n1" ) if "%app%"=="%app1%" ( REM echo .exe not present ) else ( REM echo .exe present ) echo App is %app% reg add "HKCR\Applications\%app%.exe\shell\open\command" /ve /t REG_EXPAND_SZ /d "\"%%MYAPPSDIR%%\%app%\%app%.exe\" \"%%1\"" /f