2009-04-28 5 views
1

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

С этой целью, я мог бы использовать стандартную функцию 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

ответ

5

Это строчная замена.

В принципе, если имяПеременной установлен в "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 в том, что отрицательное числа работают от конца строки:

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

C:\Documents and Settings\Administrator>echo %x:~-5% 
three 
+0

Т.е., поиск и замена? –

+0

А, я вижу сейчас :) Спасибо! –

+0

Как выживший из COMMAND.COM с MSDOS 2 или около того, CMD.EXE гораздо приятнее. Особенно приятно иметь возможность тестировать и демонстрировать такие вещи, как замена переменных непосредственно из интерактивной командной строки. В старые добрые времена некоторые вещи, такие как замена переменных среды, работали только в пакетных файлах, а не в подсказке. – RBerteig

Смежные вопросы