PDA

Показать полную графическую версию : [решено] Разница при способах запуска .Bat


White-Lion
28-03-2011, 18:03
Всем доброго времени суток.
Имею файл pr.bat:



@echo off
echo 1 - Установка Xerox 4118
set /p answer=Выберите принтер для установки:
if /i %answer%==1 (
echo .
echo ^> Установка Xerox 4118. ^<
echo 1 - Xerox 4118 IP 10.83.803.3.
echo 2 - Xerox 4118 USB
set /p answer1=Выберите Вариант принтера:
if /i %answer1%==1 (
echo .
echo ^>^> Установка Xerox 4118 IP ^<^<
cscript %SystemRoot%\system32\prnport.vbs -a -r IP_Xerox_4118_Lan -h 10.83.203.2 -o raw -n 9100
rundll32 printui.dll,PrintUIEntry /if /b "Office_3_Xerox4118_Lan" /f \\rysdc1\install$\Draivers\Printers\Xerox_4118\OriginalDiskDriver\Driver\Print\ADDPRINT\WINXP2K\wc41 18.inf /r "IP_Xerox_4118_Lan" /m "Xerox WC 4118 Series PCL 6" /u
set prdef=Office_3_Xerox4118_Lan
)
if /i %answer1%==2 (
echo .
echo ^>^> Установка Xerox 4118 USB ^<^<
rundll32 printui.dll,PrintUIEntry /if /b "Office_3_Xerox4118_USB2" /f \\rysdc1\install$\Draivers\Printers\Xerox_4118\OriginalDiskDriver\Driver\Print\ADDPRINT\WINXP2K\wc41 18.inf /r "USB002" /m "Xerox WC 4118 Series PCL 6" /u
set prdef=Office_3_Xerox4118_USB2
)
echo dryjet
set /p otv=Установить принтер по умолчанию? Yes, No:
if /i %otv%==y rundll32 printui.dll,PrintUIEntry /y /n %prdef%
)
pause

Файл отработан, но есть загвоздка.
ести запускаю из командной строки cmd, все работает.
Но когда просто запускаю сам файл pr.bat,
появляется
1 - Установка Xerox 4118
Выберите принтер для установки:

И после выбора окно пропадает без дальнейших действий.
Что я сделал не так?

ShaddyR
28-03-2011, 19:41
White-Lion, 7-ка? Разница в запуске - от имени админа или без.

Petya V4sechkin
28-03-2011, 21:17
Имею файл pr.bat
Попробуйте переименовать с расширением .cmd

White-Lion
29-03-2011, 12:15
ShaddyR,
Я администратор. пока все тестирую на своем компе. WinXPsp3.
Petya V4sechkin,
Уже пробовал. Тоже самое. :(

Может изменить в самом коде что-нибудь?

Petya V4sechkin
29-03-2011, 14:14
White-Lion, поменяйте во всех операторах if условия, например:
if /i "%answer%"=="1"

White-Lion
29-03-2011, 14:59
Petya V4sechkin,
Исправил на:
@echo off
echo 1 - Установка Xerox 4118
set /p answer=Выберите принтер для установки:
if /i "%answer%"=="1" (
echo .
echo ^> Установка Xerox 4118. ^<
echo 1 - Xerox 4118 IP 10.83.803.3.
echo 2 - Xerox 4118 USB
set /p answer1=Выберите Вариант принтера:
if /i "%answer1%"=="1" (
echo .
echo ^>^> Установка Xerox 4118 IP ^<^<
cscript %SystemRoot%\system32\prnport.vbs -a -r IP_Xerox_4118_Lan -h 10.83.203.2 -o raw -n 9100
rundll32 printui.dll,PrintUIEntry /if /b "Office_3_Xerox4118_Lan" /f \\rysdc1\install$\Draivers\Printers\Xerox_4118\OriginalDiskDriver\Driver\Print\ADDPRINT\WINXP2K\wc41 18.inf /r "IP_Xerox_4118_Lan" /m "Xerox WC 4118 Series PCL 6" /u
set prdef=Office_3_Xerox4118_Lan
)
if /i "%answer1%"=="2" (
echo .
echo ^>^> Установка Xerox 4118 USB ^<^<
rundll32 printui.dll,PrintUIEntry /if /b "Office_3_Xerox4118_USB2" /f \\rysdc1\install$\Draivers\Printers\Xerox_4118\OriginalDiskDriver\Driver\Print\ADDPRINT\WINXP2K\wc41 18.inf /r "USB002" /m "Xerox WC 4118 Series PCL 6" /u
set prdef=Office_3_Xerox4118_USB2
)
echo dryjet
set /p otv=Установить принтер по умолчанию? Yes, No:
if /i %otv%==y rundll32 printui.dll,PrintUIEntry /y /n %prdef%
)
pause

Начал ругаться на
непредвиденное начало Rundd32.

не помню гдето читал что нужно сделать вот так (добавил ^):
if /i ^%otv%^=^=y ^rundll32 printui.dll,PrintUIEntry /y /n %prdef%

Но теперь при выборе "Выберите Вариант принтера:"
проскакивает все условия и попадает в самый последний if (принтер по умочсанию).


походу бат начинает дико нестабильно работать при большом колличестве if (особенно при их вложении).

Petya V4sechkin
29-03-2011, 15:01
if /i %otv%==y rundll32 printui.dll,PrintUIEntry /y /n %prdef%
А это почему не исправили?

if /i "%otv%"=="y" rundll32 printui.dll,PrintUIEntry /y /n %prdef%

White-Lion
29-03-2011, 15:24
Petya V4sechkin,
исправлял начинал ругаться на
непредвиденное начало Rundd32.

Хм.
Странно сейчас уже не ругается
но все также пропускает.

Убрал промежуточные pause перестал пропускать if при запуске bat из командной строки.
Но при обычном запуске все также пропускает.

Petya V4sechkin
29-03-2011, 15:39
White-Lion, в общем, так:
@echo off
setlocal enableextensions enabledelayedexpansion

echo 1 - Установка Xerox 4118
set /p answer=Выберите принтер для установки:
if /i "!answer!"=="1" (
echo .
echo ^> Установка Xerox 4118. ^<
echo 1 - Xerox 4118 IP 10.83.803.3.
echo 2 - Xerox 4118 USB
set /p answer1=Выберите Вариант принтера:
if /i "!answer1!"=="1" (
echo .
echo ^>^> Установка Xerox 4118 IP ^<^<
cscript %SystemRoot%\system32\prnport.vbs -a -r IP_Xerox_4118_Lan -h 10.83.203.2 -o raw -n 9100
rundll32 printui.dll,PrintUIEntry /if /b "Office_3_Xerox4118_Lan" /f \\rysdc1\install$\Draivers\Printers\Xerox_4118\OriginalDiskDriver\Driver\Print\ADDPRINT\WINXP2K\wc41 18.inf /r "IP_Xerox_4118_Lan" /m "Xerox WC 4118 Series PCL 6" /u
set prdef=Office_3_Xerox4118_Lan
)
if /i "!answer1!"=="2" (
echo .
echo ^>^> Установка Xerox 4118 USB ^<^<
rundll32 printui.dll,PrintUIEntry /if /b "Office_3_Xerox4118_USB2" /f \\rysdc1\install$\Draivers\Printers\Xerox_4118\OriginalDiskDriver\Driver\Print\ADDPRINT\WINXP2K\wc41 18.inf /r "USB002" /m "Xerox WC 4118 Series PCL 6" /u
set prdef=Office_3_Xerox4118_USB2
)
echo dryjet
set /p otv=Установить принтер по умолчанию? Yes, No:
if /i "!otv!"=="y" rundll32 printui.dll,PrintUIEntry /y /n !prdef!
)
pause

White-Lion
29-03-2011, 15:50
Petya V4sechkin,
пришел к этому же выводу...... :) :)
но не успел написать. Огромное спасибо.

Заработало при обоих способах запуска.




© OSzone.net 2001-2012