Показать полную графическую версию : [решено] ошибка синтаксиса cmd скрипта
доброе утро!
проблема такая, нужно прочитать из входного файла 1.txt с вот таким содержимым данные после -
COMPN-computer1
USER-den
PASSWORD-1234
CMD-ipconfig
ARGS- >c:\pc\2.txt
WAIT-pause
был написан такой код
for /f "tokens=1-8 delims=-" %a in (1.txt) do set %a=%b
psexec.exe \\%compn% -u %user% -p %password% %cmd% %args%&%wait%
,но не заработал.
проблема в том, что если ручками вводить в CMD строку по одной строке: примерно вот так
c:\pc>for /f "tokens=1-8 delims=-" %a in (1.txt) do set %a=%b
c:\pc>set COMPN=computer1
c:\pc>set USER=den
c:\pc>set PASSWORD=1234
c:\pc>set CMD=ipconfig
c:\pc>set ARGS= >c:\pc\2.txt
c:\pc>set WAIT=pause
c:\pc>psexec.exe \\%compn% -u %user% -p %password% %cmd% %args%&%wait%
PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
ipconfig exited with error code 0.
Press any key to continue . . .
все работает, а вместе никак - т.е на выходе пустой файл 2.txt
помогите, как оно должно быть? команда не обязательно ipconfig любая другая с параметром %args% тоже подойдет
спасибо заранее
всем хорошего дня!
Foreigner
30-03-2012, 07:04
Den,
for /f "tokens=1,2 delims=-" %%a in (1.txt) do set "%%a=%%b"
c:\pc>1.cmd
c:\pc>for /F "tokens=1,2 delims=-" %a in (1.txt) do set %a=%b
c:\pc>set COMPN=Computer1
c:\pc>set USER=den
c:\pc>set PASSWORD=1234
c:\pc>set CMD=ipconfig
c:\pc>set ARGS= >c:\pc\2.txt
c:\pc>set WAIT=pause
c:\pc>psexec.exe \\Magic -u den -p 1234 ipconfig 1>c:\pc\2.txt & pause
PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
ipconfig exited with error code 0.
Press any key to continue . . .
ничего не изменилось !!!
откуда перед >c:\pc\2.txt & pause
взялась единица????
поэтому он и не пишет в 2.txt
спасибо
откуда перед >c:\pc\2.txt & pause
взялась единица???? »
Командный процессор добавил номер канала (StdOut) в вывод. Это нормально, и ошибкой не является. Более того, когда Вы пишете:
echo bla-bla-bla>some.txt
на самом деле сие означает именно:
1>some.txt echo bla-bla-bla
так почему же .cmd файл не работает???
где конкретно ошибка ? как написать чтобы все заработало как надо???
спасибо
Den, я не вижу приведённого Вами кода пакетного файла. Только отдельные команды или вывод командного процессора.
поставлю вопрос по другому как из этих двух строчек
for /f "tokens=1-8 delims=-" %a in (1.txt) do set %a=%b
psexec.exe \\%compn% -u %user% -p %password% %cmd% %args%&%wait%
сделать .cmd файл
или вообще все переделать - неважно - главное прочитать из 1.txt информацию и внести ее в psexec.exe и получить на выходе текстовый файл с результатом выполненной команды с параметром необязательно ipconfig>c:\pc\2.txt
видимо я совсем косоязычно выражаю мысли
спасибо
видимо я совсем косоязычно выражаю мысли »
Обычно достаточно научиться разделять текст на предложения, начинать их с заглавных букв и пользоваться знаками препинания для придания тексту осмысленности.
Болванка пакетного файла «Some.cmd»:
@echo off
setlocal enableextensions enabledelayedexpansion
set sFileIn=%~1
if defined sFileIn (
if exist "%sFileIn%" (
for /f "usebackq tokens=1,2 delims==" %%i in ("%sFileIn%") do set %%i=%%j
psexec.exe \\!COMPN! -u !USER! -p !PASSWORD! "!CMD!" >"!OUTFILE!"
)
)
endlocal
exit /b 0
Инициализационный файл «Some.ini»:
COMPN=computer1
USER=den
PASSWORD=1234
CMD=ipconfig.exe
OUTFILE=c:\pc\2.txt
Вызов:
Some.cmd Some.ini
P.S. Если вызов «PsExec.exe» будет осуществляться в контексте текущего пользователя — указание пары «Имя»/«Пароль» не является обязательным.
Пробую!
Огромное спасибо за страрание и терпение!
kiripanda
30-03-2012, 18:23
был написан такой код
for /f "tokens=1-8 delims=-" %a in (1.txt) do set %a=%b
psexec.exe \\%compn% -u %user% -p %password% %cmd% %args%&%wait%
psexec.exe \\%compn% -u %user% -p %password% %cmd% %args%&%wait%
,но не заработал.
проблема в том, что если ручками вводить в CMD строку по одной строке: примерно вот так
c:\pc>for /f "tokens=1-8 delims=-" %a in (1.txt) do set %a=%b
{ . . . }
все работает, а вместе никак »
В пакетных файлах для команды FOR используется запись %%переменная вместо %переменная.
вам же был дан код http://forum.oszone.net/post-1888833.html#post1888833 :
for /f "tokens=1,2 delims=:" %%a in (text.txt) do set %%a=%%b
kiripanda, он так и делал (http://forum.oszone.net/post-1889906.html#post1889906) (по ссылке — вывод командным процессором исполняемых им команд пакетного файла). Другое дело, что строить представление о содержимом пакетного файла по выводу как-то не рационально.
всем спасибо !
Отдельная благодарность Iska!
все заработало
впереди еще 2 задачи
надеюсь на помощь!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.