![]() |
Не устанавливаются переменные в Win7
Здравствуйте!
Возникла неожиданная проблема в Windows 7, нужно создать а потом запустить пару BATничков, в одном устанавливаются пути командой SET а в другом они используются, обнаружил вдруг что команда SET невыполняется и никаких переменных не создает, поэтому второй батник неработает без этих переменных, пути указывал правильно, от имени администратора запускал, странно, выглядит первый батник примерно так: set HOME=C:\sdfsdg set KEY_DIR=C:\sdfsdg\sdfs set KEY_EMAIL=ivan@localhost |
Цитата:
|
Не суть важно но если настаиваете
Первый set HOME=C:\OpenVPN\easy-rsa set KEY_CONFIG=openssl-1.0.0.cnf set KEY_DIR="C:\OpenVPN\ssl" set KEY_SIZE=1024 set KEY_COUNTRY=RU set KEY_PROVINCE=Moscow set KEY_CITY=Moscow set KEY_ORG=test_org set KEY_EMAIL=root@localhost set KEY_CN=test set KEY_NAME=test set KEY_OU=test set PKCS11_MODULE_PATH=test set PKCS11_PIN=1234 второй @echo on rem move to the HOME directory specified in VARS script cd\ cd %HOME% rem set a temporary KEY_DIR variable set d=%KEY_DIR% rem delete the KEY_DIR and any subdirs quietly rmdir /s /q %d% rem make a new KEY_DIR mkdir %d% rem copy in a fesh index file so we begin with an empty database copy index.txt.start %d%\index.txt rem copy in a fresh serial file so we begin generating keys at index 01 copy serial.start %d%\serial. pause Второй файл не видит никаких тех путей установленных командой SET в первом батнике, открывал сеанс DOS вводил SET, и действительно эти переменные пусты |
DeepWaters, это не всё.
Цитата:
|
Из Total commander XP, Enter-ом
|
DeepWaters, по очереди, сначала один, затем другой — так я понимаю? Если так, то в этом и состоит ошибка: для исполнения пакетных файлов задействуются два дочерних экземпляра командного процессора «cmd.exe». И второй экземпляр командного процессора, в котором исполняется второй пакетный файл, знать ничего не знает о произведённых изменениях в переменных окружения первым пакетным файлом в первом экземпляре командного процессора.
Создайте ещё один пакетный файл, в котором будут последовательно вызываться на исполнение оба Ваших пакетных файла: Код:
@echo off |
DeepWaters, переменные, созданные в сеансе CMD, являются локальными для этого сеанса и не имеют никакого отношения к другому сеансу CMD. Вот если бы вы вызывали второй батник из первого – тогда бы они наследовались.
|
Еще подскажите пожалуйста как правильно в батниках иметь дело с длинными именами каталогов содержащих пробелы, например c:\program files (понадобилось переделать вышеуказанные батники под каталог program files)
указываю set KEY_DIR=%ProgramFiles%\OpenVPN\ssl по команде SET выходит что все правильно - KEY_DIR=C:\Program Files\OpenVPN\ssl но потом при обращении к этой переменной команда обращается к пути Files\OpenVPN\ssl\ |
Цитата:
Код:
set KEY_DIR=%ProgramFiles%\OpenVPN\ssl Цитата:
Код:
rmdir /s /q "%d%" Код:
pushd "%d%" && (rmdir /s /q "%d%" & popd) 2>nul |
Цитата:
Даже лучше так: Код:
set "KEY_DIR=%ProgramFiles%\OpenVPN\ssl" Цитата:
"+1". |
Цитата:
|
Iska, на собственном опыте знаю, что в отличие от других конструкций с кавычками, например:
Код:
cmd /c "..." Код:
mshta "..." Код:
for /f %%i in ("...") do ... Код:
for /f %%i in ('"..."') do ... Код:
set A=B Код:
set "A=B" Код:
set "A=B" |
Georgio, спасибо, ясно.
|
Время: 21:01. |
Время: 21:01.
© OSzone.net 2001-