Каков наилучший способ сделать подстроку в пакетном файле?
Я хочу получить имя текущего пакетного файла без расширение файла.
спасибо этой ссылке, у меня есть имя файла С расширения... но каков наилучший способ сделать подстроку в пакетном файле?
или есть другой способ получить имя файла без расширения?
в этом сценарии можно с уверенностью предположить 3 расширения букв.
3 ответов:
Ну, для того, чтобы просто получить имя файла вашей партии самый простой способ было бы просто использовать
%~n0.@echo %~n0выведет имя (без расширения) текущего пакетного файла (если не выполняется в подпрограмме, вызываемой
call). Полный список таких "специальных" замен для имен путей можно найти с помощьюhelp forв самом конце справки:кроме того, замена для ссылки на переменные были улучшенный. Теперь вы можете использовать следующие дополнительные функции синтаксис:
%~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 %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty stringмодификаторы могут быть объединены, чтобы получить составные результаты:
%~dpI - expands %I to a drive letter and path only %~nxI - expands %I to a file name and extension only %~fsI - expands %I to a full path name with short names onlyчтобы точно ответить на ваш вопрос, однако: подстроки выполняются с помощью
:~start,lengthПримечание:%var:~10,5%извлекает 5 символов из позиции 10 в переменной окружения
%var%.Примечание: индекс строк равен нулю, поэтому первый персонаж находится в позиции 0, второй 1 и т. д.
чтобы получить подстроки переменных аргументов, таких как
%0,%1и т. д. вы должны назначить их обычной переменной среды с помощьюsetпервый::: Does not work: @echo %1:~10,5 :: Assign argument to local variable first: set var=%1 @echo %var:~10,5%синтаксис еще более мощный:
%var:~-7%извлекает последние 7 символов%var%%var:~0,-4%будет извлекать все символы, кроме последних четырех, которые также избавят вас от файла расширение (при условии, что три символа после точки [.]).посмотреть
help setподробнее об этом синтаксисе.
красиво описано выше!
для всех тех, кто может пострадать, как я, чтобы получить эту работу в локализованной Windows (мой XP на словацком языке), вы можете попробовать заменить
%С!Так:
SET TEXT=Hello World SET SUBSTRING=!TEXT:~3,5! ECHO !SUBSTRING!
в качестве дополнительной информации к ответу Джоуи, который не описан в справке
set /?, ниfor /?.
%~0расширяется до имени собственного пакета, точно так же, как он был набран.
Поэтому, если вы запустите свой пакет, он будет расширен как%~0 - mYbAtCh %~n0 - mybatch %~nx0 - mybatch.batно есть одно исключение, расширение в подпрограмме может завершиться неудачей
echo main- %~0 call :myFunction exit /b :myFunction echo func - %~0 echo func - %~n0 exit /bэто приводит к
main - myBatch Func - :myFunction func - mybatchфункции
%~0всегда расширяется до имени функции, не из пакетного файла.
Но если вы используете хотя бы один модификатор, он снова покажет имя файла!
Comments