Пакетные файлы, $: и ~ - PullRequest
       16

Пакетные файлы, $: и ~

1 голос
/ 28 апреля 2009

Я пишу приложение, которое должно будет расширять строки окружения в файле.

Для этого я мог бы использовать стандартную функцию Windows API ExpandEnvironmentStrings: http://msdn.microsoft.com/en-us/library/ms724265(VS.85).aspx

У меня есть несколько проблем с этой функцией. Первый: The size of the lpSrc and lpDst buffers is limited to 32K.

Далее: Note that this function does not support all the features that Cmd.exe supports. For example, it does not support %variableName:str1=str2% or %variableName:~offset,length%.

Я бы хотел реализовать эти дополнительные функции, которые позволяет cmd.exe, но я не совсем уверен, что они есть : ~ смещение, длина немного очевидна ... подстрока. Но не уверен, что первый.

Есть идеи?

Billy3

1 Ответ

5 голосов
/ 28 апреля 2009

Подстановка строк.

В основном, если variableName установлено в "I am three", то "%variableName:three=four%" генерирует "I am four" (двойные кавычки, вставленные для лучшего форматирования, они не образуют часть строк).

C:\Documents and Settings\Administrator>set x=I am three

C:\Documents and Settings\Administrator>echo %x%
I am three

C:\Documents and Settings\Administrator>echo %x:three=four%
I am four

Вы также можете заменить на пустую строку (очевидно) и заменить с начала строки (не так очевидно):

C:\Documents and Settings\Administrator>echo %x:three=%
I am 

C:\Documents and Settings\Administrator>echo %x:*am=I am not%
I am not three

Кроме того, вариант подстроки является Pythonesque, поскольку отрицательные числа работают от end строки:

C:\Documents and Settings\Administrator>echo %x:~,4%
I am

C:\Documents and Settings\Administrator>echo %x:~-5%
three
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...