Каков наилучший способ сделать подстроку в пакетном файле?



Я хочу получить имя текущего пакетного файла без расширение файла.



спасибо этой ссылке, у меня есть имя файла С расширения... но каков наилучший способ сделать подстроку в пакетном файле?



или есть другой способ получить имя файла без расширения?



в этом сценарии можно с уверенностью предположить 3 расширения букв.

504   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

    Ничего не найдено.