Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Работа со строками в bat-файлах


Автор: AgatA 14.5.2009, 17:09
Подскажите, пожалуйста, как вместо конкретных чисел (0 и 4) установить переменные среды?
Код

@echo off         
set /p s=s=
set /p str=%s:~0,4%
echo %str%

Автор: 01MDM 14.5.2009, 18:54
AgatA
Цитата

Подскажите, пожалуйста, как вместо конкретных чисел (0 и 4) установить переменные среды?


Код

@echo off
setlocal enabledelayedexpansion

set "string=12345"
set "var1=0"
set "var2=4"

set "string=!string:~%var1%,%var2%!"

echo %string%

Автор: AgatA 16.5.2009, 12:23
Ясно. Спасибо большое!

Автор: AlexeyC 12.10.2009, 18:13
Цитата(01MDM @ 14.5.2009,  18:54)
AgatA
Цитата

Подскажите, пожалуйста, как вместо конкретных чисел (0 и 4) установить переменные среды?


Код

@echo off
setlocal enabledelayedexpansion

set "string=12345"
set "var1=0"
set "var2=4"

set "string=!string:~%var1%,%var2%!"

echo %string%

Добрый день.

Пожалуйста подскажите как в bat можно удалить последний символ переменной ?
Например 

set var = string

нужно другой переменной присвоить значение var без последнего символа (g).



Автор: 01MDM 12.10.2009, 20:00
Очень просто:
Код

@echo off
set "var1=string"
set "var2=%var1:~0,-1%"
echo %var2%

Автор: AlexeyC 13.10.2009, 18:25
Цитата(01MDM @ 12.10.2009,  20:00)
Очень просто:
Код

@echo off
set "var1=string"
set "var2=%var1:~0,-1%"
echo %var2%

Спасибо !

Автор: AlexeyC 17.10.2009, 16:40

А почему оператор set не работает внутри циклов for ?

Например:


for %%i in (%string%) DO (
set var=%%i
echo %var%
)

Переменная var не получает значения %%i

системы WinXp, Win2k3.


Автор: 01MDM 18.10.2009, 12:23
AlexeyC
Все работает, но нужно включить расширенную обработку комманд:
Код

@echo off
setlocal enabledelayedexpansion

for %%i in (%string%) do (
    set "var=%%i"
    echo !var!
)

Или выносить тело цикла в наружу:
Код

@echo off
for %%i in (%string%) do call:sub "%%i"
goto:eof

:sub
set "var=%~1"
echo %var%

Автор: AlexeyC 20.10.2009, 22:26
01MDM
Спасибо.
Так действительно работает...но не совсем как мне надо.
Если переменная string содержит пробелы (например set string="\\host\c$\home dir"), то значение string обрезается до первого пробела.


Мне нужно реализовать внутри цикла разбор переменной string.
например:
Код


set string="\\host1\c$\home dir" "\\host2\c$\home dir" "\\host3\c$\home dir"

for %%j in (%string%) do (
тут разбор string
echo %var%
)



в результате переменная var должна последовательно принять значения \\host1\c$\home dir   \\host2\c$\home dir и \\host3\c$\home dir

Автор: 01MDM 21.10.2009, 08:06
AlexeyC
Твоя переменная разбирается правильно:
Код

@echo off
setlocal enabledelayedexpansion

set string="\\host1\c$\home dir" "\\host2\c$\home dir" "\\host3\c$\home dir"
for %%i in (%string%) do (
    set "var=%%~i"
    echo !var!
)

На выходе:
Код

\\host1\c$\home dir
\\host2\c$\home dir
\\host3\c$\home dir

Лучше обрисуй задачу целиком.


Автор: Vlad705 20.10.2014, 08:24
Привет всем!
подскажите, пожалуйста, в следующем вопросе.
При работе со строками в файле, мне необходимо присвоить переменную в которой присутствуют символы "=" и при присвоении код работает некорректно.
(например, set str5=add key="LocalEnterprise") 
Подскажите пожалуйста как можно решить следующую проблему?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)