none
автоматизация ответов (помогите со скриптом) RRS feed

  • Общие обсуждения

  • Добрый  день!
    Подскажите пожалуйста, как можно в консольных программах автоматически вводить Yes/No?
    К примеру комманда "chkdsk c: /f" выдает запрос: "Невозможно выполнить команду CHKDSK, так как указанный том используется другим процессом. Следует ли выполнить проверку этого тома при следующей перезагрузке системы? [Y(да)/N(нет)]". Как автоматизировать ввод нужных ответов?

    Set shell = CreateObject("WScript.Shell")
    Set cmd = shell.Exec("%comspec% /k chkdsk /f c:")
    While cmd.Status=0
    WScript.Sleep 200
    Wend
    -----------------------------
    Что дальше???? Подскажите пожалуйста!

    4 января 2008 г. 23:24

Все ответы

  • Попробуйте так:

     

    echo Y | chkdsk /F C:

     

    И еще посмотрите это обсуждение:

     

    http://forums.microsoft.com/technet-ru/ShowPost.aspx?PostID=2446115&SiteID=40

     

    5 января 2008 г. 5:49
    Модератор
  • Благодарю за ответ. Но этот способ мне не подходит. Хотелось бы как-то анализировать вывод команды.
    Таже chkdsk может запросить проверку после перезагрузки, а может и отключение тома. Пробовал получить вывод через stdout, но что-то ничего не получается. Sad


    7 января 2008 г. 22:51
  • Есть такой вариант, немного нагроможденно, но может выручить:

    если направить стандартный вывод работы досовых команд в файл (например chkdsk /f c: >c:\log.txt)
    при выполнении команды, требующей подтверждения, в созданном текстовом файле последней строкой будет как раз запрос на нажатие Y или N и команда также будет ждать нажатия клавиши.
    В этот момент можно открыть созданный файл (c:\log.txt), прочитать последнюю строку и ее анализировать.
    Соответственно, если послать команде нужный символ выполнение продолжиться и соответственно продолжится запись в файл до следующей остановки.

    Соответсвенно получается, что нужно анализировать просто последнюю строку файла, в который идет вывод.

    Есть еще вариант на Delphi, если нужно, могу опубликовать.
    8 января 2008 г. 6:05
  • Так тоже не получится. Пробовал уже... Stdout и >log.txt ничего не содержат, пока не нажмешь нужную клавишу.

     

    8 января 2008 г. 9:25
  • странно, сейчас выполнил chkdsk /f c: >c.log.txt открыл на просмотр файл - есть запись с предложением выполнить проверку после перезагрузки....


    Странно... Может быть файл был открыт на редактирование?
    Сейчас еще что-нить поищу, если так не устраивает...
    8 января 2008 г. 9:59
  • Как вариант, вы можете сначала запустить chkdsk, отвечая "N", проанализировать в stdout, что же он там предлагает, а затем запустить или не запустить его, отвечая "Y".

     

    8 января 2008 г. 10:07
    Модератор
  • Ничего хорошего пока не удалось найти.

    Если блокировку тома можно принудительно отключать используюя /X то как быть с томами которые содержита swap -  они в любом случае будут проверены только после перезагрузки...

    Наверное действительно пока лучшее решение - запуск команды с ответом N и производить анализ....
    8 января 2008 г. 12:52
  • а кто-нибудь знает, как можно решить проблему с кодировкой? chkdsk /f c: >c:\log.txt сохраняет текст в ДОС кодировке и при чтении получается нечитаемый текст.

    пример:
    set text = fso.OpenTextFile("c:\log.txt")
    WScript.Echo text.ReadAll

    ??ўR§¬R¦-R ўлЇR<-Ёвм ЄR¬ -¤г CHKDSK, в Є Є Є гЄ § --лc вR¬ ЁбЇR<м§г?вбп
    ¤аг?Ё¬ ЇаRж?ббR¬. '<?¤г?в <Ё ўлЇR<-Ёвм ЇаRў?аЄг нвR?R вR¬  ЇаЁ
    б<?¤гой?c Ї?а?§ ?аг§Є? бЁбв?¬л? [Y(¤ )/N(-?в)]
    Exit code: 0 , 0000h


    8 января 2008 г. 15:47
  • Метод OpenTextFile имеет параметр format

    TnstateUseDefault -2 Файл открывается в формате, используемом системой по умолчанию
    TristateTrue -1 Файл открывается в формате Unicode
    TristateFalse 0 Файл открывается в формате ASCII

    8 января 2008 г. 16:53
  • тоже самое, что я делаю не так?

    Set shell = CreateObject ("WScript.Shell")
    Set fso = CreateObject ("scripting.filesystemobject")
    Set cmd = shell.Exec("chkdsk.exe /f c: >c:\log.txt")
    WScript.sleep 2000
    set text = fso.OpenTextFile("c:\log.txt", 1, True, 0 )
    WScript.Echo text.ReadAll


    8 января 2008 г. 21:28
  • При работе в DOS  кодировка меняется командой chcp

     

    для кодировки Windows chcp 1251

    9 января 2008 г. 10:06
  • а кто-нибудь знает, как можно решить проблему с кодировкой? chkdsk /f c: >c:\log.txt

    > ??ўR§¬R¦-R ўлЇR<-Ёвм ЄR¬ -¤г CHKDSK, в Є Є Є гЄ § --лc вR¬ ЁбЇR<м§г?вбп
    > ¤аг?Ё¬ ЇаRж?ббR¬. '<?¤г?в <Ё ўлЇR<-Ёвм ЇаRў?аЄг нвR?R вR¬  ЇаЁ
    > б<?¤гой?c Ї?а?§ ?аг§Є? бЁбв?¬л? [Y(¤ )/N(-?в)]
    > Exit code: 0 , 0000h

    Образец кода
    @echo off
    for /f "tokens=*" %%i in ('chkdsk /f d:') do (
        call:convert
        echo %%i >>log.txt
        chcp 866 1>nul
    )
    goto:eof
    :convert
    chcp 1251 1>nul



    Если проверялся активный раздел и log.txt уже есть то

    Образец кода

    @echo off
    for /f "tokens=*" %%i in ('type log-866.txt') do (
        call:convert
        echo %%i>>log-1251.txt
        chcp 866 1>nul   
    )
    goto:eof
    :convert
    chcp 1251 1>nul


    Или воспользоватся какой-нибудь утилитой, например iconv.exe
    iconv -f cp866 -t cp1251 log-866.txt >log-1251.txt

    9 января 2008 г. 11:45
  • ok. Спасибо!
    9 января 2008 г. 15:32