Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] ошибка синтаксиса cmd скрипта (http://forum.oszone.net/showthread.php?t=231632)

Den 29-03-2012 23:08 1889654

ошибка синтаксиса 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 1889749

Den,
Код:

for /f "tokens=1,2 delims=-" %%a in (1.txt) do set "%%a=%%b"

Den 30-03-2012 11:54 1889906

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

спасибо

Iska 30-03-2012 12:55 1889962

Цитата:

Цитата Den
откуда перед >c:\pc\2.txt & pause
взялась единица???? »

Командный процессор добавил номер канала (StdOut) в вывод. Это нормально, и ошибкой не является. Более того, когда Вы пишете:
Код:

echo bla-bla-bla>some.txt
на самом деле сие означает именно:
Код:

1>some.txt echo bla-bla-bla

Den 30-03-2012 14:29 1890026

так почему же .cmd файл не работает???
где конкретно ошибка ? как написать чтобы все заработало как надо???
спасибо

Iska 30-03-2012 14:50 1890042

Den, я не вижу приведённого Вами кода пакетного файла. Только отдельные команды или вывод командного процессора.

Den 30-03-2012 15:51 1890090

поставлю вопрос по другому как из этих двух строчек

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
видимо я совсем косоязычно выражаю мысли

спасибо

Iska 30-03-2012 16:22 1890120

Цитата:

Цитата Den
видимо я совсем косоязычно выражаю мысли »

Обычно достаточно научиться разделять текст на предложения, начинать их с заглавных букв и пользоваться знаками препинания для придания тексту осмысленности.


Болванка пакетного файла «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» будет осуществляться в контексте текущего пользователя — указание пары «Имя»/«Пароль» не является обязательным.

Den 30-03-2012 17:19 1890176

Пробую!
Огромное спасибо за страрание и терпение!

kiripanda 30-03-2012 18:23 1890226

Цитата:

Цитата 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%
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/?
В пакетных файлах для команды FOR используется запись %%переменная вместо %переменная.

вам же был дан код http://forum.oszone.net/post-1888833.html#post1888833 :

for /f "tokens=1,2 delims=:" %%a in (text.txt) do set %%a=%%b

Iska 30-03-2012 18:41 1890236

kiripanda, он так и делал (по ссылке — вывод командным процессором исполняемых им команд пакетного файла). Другое дело, что строить представление о содержимом пакетного файла по выводу как-то не рационально.

Den 30-03-2012 19:15 1890264

всем спасибо !
Отдельная благодарность Iska!
все заработало
впереди еще 2 задачи

надеюсь на помощь!


Время: 14:57.

Время: 14:57.
© OSzone.net 2001-