PDA

Показать полную графическую версию : [решено] Скрипт не понимает переменные. Подскажите.


x0r
21-09-2016, 18:20
Сделал скриптег для запуска программ. Чтоб не всякие там сложности с реестром, а все в одном месте было. Скрипт берет список нужных прог из файла... и тут янипанимаю: нельзя использовать переменные типа %PROGRAMFILES% или %COMMANDER_PATH% в путях. А хотелось бы.
Подскажите что не так.

@echo off
title Autorun Programs v1.1
chcp 866>nul
cd /d %~dp0
rem if not exist progs.lst goto HELP
:MAIN
rem echo ^ ----------------------------------------------------
rem echo ^ ^| ^|
rem echo ^ ^| ¤¤¤ Запустить программы Автозагрузки ? ¤¤¤ ^|
rem echo ^ ^| ^|
rem echo ^ ----------------------------------------------------
rem set /p S=[ "Y" - Запустить / "N" - нет Выход ] _
rem if /i %S% neq y exit
for /f "delims=; tokens=1,2* eol=#" %%a in (progs.lst) do (
@tasklist|find /i "%%b" 1>nul
if errorlevel 1 (echo ^ ^-----------^> Запускаю %%b
start "" "%%a\%%b" %%~c & ping 127.0.0.1 -n 5 >nul
)
)



#----------------------------------------------------------------------
# не использовать переменные. %PROGRAMFILES% и др.
#----------------------------------------------------------------------
d:\MyPROGs\FM\TC;TOTALCMD.EXE
C:\Program Files\Privacyware\Privatefirewall 7.0;PFGUI.exe
d:\MyPROGs\FM\TC\SOFT\UsefullUtilits\ActiveKeyboard;HotFiles.exe
d:\MyPROGs\FM\TC\SOFT\Process_and_Servicess\ProcessHacker2\x86;ProcessHacker.exe
d:\MyPROGs\FM\TC\SOFT\Process_and_Servicess\ProcessKiller;processkiller.exe
#c:\0l0\MyPROG\FM\TC\SOFT\FileViewers\Everything;Everything.exe;-startup
#c:\0l0\MyPROG\FM\TC\SOFT\UsefullUtilits\Clipdiary37;clipdiary-portable.exe
d:\MyPROGs\FM\TC\SOFT\UsefullUtilits\Clipdiary;clipdiary.exe
d:\MyPROGs\FM\TC\SOFT\UsefullUtilits\FlyingWindows;flyingwindows.exe

alpap
23-09-2016, 03:08
нельзя использовать переменные типа %PROGRAMFILES% »
Почему.
Содержимое "file.txt":

%Programfiles%


Теперь запустите код:

@echo off
<"file.txt">"list.txt" (for /f "delims=" %%a in ('more') do @cmd/v/c dir /b "%%a")
exit
.

x0r
24-09-2016, 07:14
Это не то. У мя в скрипте в цикле идет запуск, разбирается строка с путем из файла(# - это комментарий, пропускается, а разделитель между путем и *.exe-файлом - ; )
for /f "delims=; tokens=1,2* eol=#" %%a in (progs.lst)потом идет проверка на существование такого процесса
@tasklist|find /i "%%b" 1>nulи если его нету, то тогда запускается нужная программа
start "" "%%a\%%b" %%~c & ping 127.0.0.1 -n 5 >nulБерутся строки через переменные много раз и видать я чего-то не знаю, почему так нельзя. Или может нада по другому построить цикл?
Попробуй чеерез мой скрипт запустить файлег стаким содержанием:
%SYSTEMROOT%;notepad.exe
%SYSTEMROOT%\System32;calc.exe... будет ошибка.

Iska
25-09-2016, 05:13
x0r, добавьте в:
start "" "%%a\%%b" %%~c
вызов call для раскрытия переменных окружения:
call start "" "%%a\%%b" %%~c
Разумеется, %COMMANDER_PATH% и иже с ними будут доступны токмо из-под Total Commander'а.

x0r
08-10-2016, 23:33
Теперь всё как надо.
За переменные вкурсе, скрипт живет внутри ТС и запускается из него. А так же, наверно, можно вначале скрипта прописать эту переменную и должно быть тоже, гут.
Благодарю!




© OSzone.net 2001-2012