Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: Elroir
Дата сообщения: 06.11.2007 08:50
Aldares
Сначала вопрос - зачем используется ключ /D в for-е?
Дальше - errorlevel=0 обычно означает завершение работы без ошибок, а errorlevel=1 - с ошибками. Errorlevel не должен быть своим для каждой команды. Если запускать команду dir с ключом /a-d, то dir установит errorlevel=1 если в тестируемой директории (в твоем случае в корне диска) нет ни одного файла.
Есть еще один способ проверки - "if exist d:\nul".
Автор: Grisha_Tamashi_SAN
Дата сообщения: 06.11.2007 17:14
Приветствую всех.
Пытался сделать скриптик для удаленного выключения всех компов в сети.
Вот что из этого получилось. Но есть одно но. Хотелось бы на практике исключить
не только один сервер, а несколько компьютеров(можно по списку в файле или указать в батнике в ручную). Подскажите пожалуйста как правильнее будет, дабы не наступать на одни и те же грабли?

Цитата:

@echo off
@net view|@for /F "tokens=1" %%c in ('@find "\\"') do (
@if not "%%c"=="\\SERV313" (
ECHO %DATE:~-10% %TIME% shuting down %%c
echo shutdown /s /m %%c
echo.
) >>shtdown_list.txt
)

Премного благодарен за ответ.
Автор: Elroir
Дата сообщения: 06.11.2007 20:44
Grisha_Tamashi_SAN
Должно быть что-нибудь вроде такого:

Код:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('net view ^| find "\\" ^| findstr /v /g:no_shut.lst') do (
echo !date:~-10! !time! shutting down %%a
echo shutdown -s -m %%a
)>>shtdown_list.txt
Автор: Panadol
Дата сообщения: 06.11.2007 23:26
Как сделать что бы окно доса не закрывалось сразу после завершения приложения???
Хочу увидеть результат работы, а окно очень быстро закрывается.
Вариант запустить cmd не устраивает - слишком долго в досе набирать строку с программой.


Добавлено:
Проблему решил - написал батник и в конце команда пауза
Автор: Aldares
Дата сообщения: 07.11.2007 07:06
В цикле не хочет переменную дописывать :[
Делаю

Код: cls
for /D %%d in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %%d:\nul do set zz=%zz%,%%d
echo %zz%
pause
Автор: 01MDM
Дата сообщения: 07.11.2007 08:01
Aldares
Не совсем понял, что надо

Код:
@echo off
set "zz=2 zet"
cls
for /D %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
if exist %%d:\nul set "zz=%zz%,%%d" && call:sub
)
goto:eof
:sub
echo %zz%
Автор: Grisha_Tamashi_SAN
Дата сообщения: 07.11.2007 11:06
Elroir

Цитата:
Должно быть что-нибудь вроде такого:

Хм, в лог попадают комп-ры исключения

Цитата:
07.11.2007 11:55 shutting down \\SERVER
Command shutdown -s -m \\SERVER

Значит исключения не происходит?
Автор: Elroir
Дата сообщения: 07.11.2007 11:20
Grisha_Tamashi_SAN
1. У меня в коде небольшая ошибка - вместо "tokens=*", должно быть "tokens=1".
2. В файле no_shut.lst названия файлов, которые не нужно выключать, записаны?
Автор: Grisha_Tamashi_SAN
Дата сообщения: 07.11.2007 11:52

Цитата:
Elroir

Хм, результат тот же

Цитата:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1" %%a in ('net view ^| find "\\" ^| findstr /v /g:no_shut.lst') do (
echo !date:~-10! !time:~0,5! shutting down %%a
echo Command shutdown -s -m %%a
)>>shtdown_list.txt

no_shut.lst

Цитата:
\\server
\\server4
\\server3

Пробовал без "\\" - результат тот же
Лог

Цитата:
07.11.2007 12:42 shutting down \\SALES
Command shutdown -s -m \\SALES
07.11.2007 12:42 shutting down \\SERVER
Command shutdown -s -m \\SERVER
07.11.2007 12:42 shutting down \\SERVER3
Command shutdown -s -m \\SERVER3
07.11.2007 12:42 shutting down \\SERVER4
Command shutdown -s -m \\SERVER4
07.11.2007 12:42 shutting down \\SERVERBK

Автор: Elroir
Дата сообщения: 07.11.2007 12:05
Grisha_Tamashi_SAN
Дело в том, что server и SERVER - это две разные вещи.
Добавь ключ /i к findstr:

Код:
for /f "tokens=1" %%a in ('net view ^| find "\\" ^| findstr /i /v /g:no_shut.lst') do (
Автор: Grisha_Tamashi_SAN
Дата сообщения: 07.11.2007 12:49
Elroir
ДА... то что дохтур прописал.
А где почитать по замене %TIME% на !TIME!?
Удачи. Спасибо за терпение.
Автор: Elroir
Дата сообщения: 07.11.2007 13:02
Grisha_Tamashi_SAN
set /?

Цитата:
Delayed environment variable expansion allows you to use a different
character (the exclamation mark) to expand environment variables at
execution time. If delayed variable expansion is enabled, the above
examples could be written as follows to work as intended:

set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)

set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%

Автор: kalkin5
Дата сообщения: 07.11.2007 13:24
есть 2 известные программы: iTunes & QuickTime, как-то решил проверить почему они занимают такой большой размер после инсталяции, оказалось, что они, по доброте душевной, инсталируют не только русский (к примеру) и английский, но и все другие языки... что не есть гуд имхо
отсуда вопрос:
как с помощью bat файла удалить лишние языки?
структура папок:
iTunes\iTunes.Resources
iTunes\iTunesHelper.Resources
iTunes\iTunesMiniPlayer.Resources
в каждой из этих папок есть подпаки, такие как:
en.lproj, ru.lproj
и всякие другие "ненужные" именно мне
da.lproj, de.lproj, es.lproj, fi.lproj, fr.lproj, it.lproj, ja.lproj, ko.lproj, nb.lproj, nl.lproj, sv.lproj, zh_CN.lproj, zh_TW.lproj
как их красиво "грохнуть" из всех трех папок сразу? при минимуме строк в bat файле?
как идея переместить нужные папки (с сохранением структуры) во временную, удалить эти три папки, а потом переместить "нужные" файлы в зад,
только как это все красиво написать? подскажите пож-та...
Автор: Maza Faka
Дата сообщения: 07.11.2007 14:31
kalkin5
Попробуй так:

Код:

@echo off
for /f "delims=" %%a in (
'dir c:\temp\iTunes /b /s /a ^| findstr /i "lproj\>" ^| find /i /v "ru." ^| find /i /v "en."') do rd /q /s %%a

Автор: Aldares
Дата сообщения: 08.11.2007 05:25
01MDM

Вот, что нужно .


Цитата:
Помогите определить доступность диска .
есть в батнике команда
for /D %%d in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %%d:\autorun.inf.tmp attrib -s -h -r %%d:\autorun.* & del %%d:\autorun.*
Если диска с такой буквой просто нет, то все нормально .
Если в машинке стоит кардридер - есть несколько съемных дисков, которые недоступны, пока не сунешь в них карточку, при обращении к ним винда вываливает окошко "диск недоступен ок/отмена/повторить" . Соответственно, если нужно обратиться к каждому из дисков раз по 10, приходится нажимать давить кнопку "отмена" ~50 раз .
Я предполагаю сделать что-то типа for /D %%d in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do dir %%d: , проверить errorlevel и собрать новую строку из доступных дисков, но чего-то не получается - эррорлевел всегда или 1 или 0, хотя должен быть своим для каждой команды .

Нашел
Commands CLS, CD and DIR doesn't reset the current errorlevel, and other DOS commands returns their own errorlevels.
надо искать другой путь ..
Автор: Tipulatoid
Дата сообщения: 08.11.2007 05:53
Aldares

Цитата:
Помогите определить доступность диска .

Попробуй так. Не обещаю, что поможет, но попробуй.

Код: @echo off
setlocal enabledelayedexpansion
for /f "tokens=1*" %%a in ('fsutil fsinfo drives ^| find "\"') do (
if defined first (
set drives=!drives! %%a
) else (
set drives=!drives!%%b
set first=yes
)
)
echo %drives%
Автор: kalkin5
Дата сообщения: 08.11.2007 09:06
Maza Faka
спасибо, а можно расшифровать пож-та?
его можно запускать из любой папки или только из папки где установлен iTunes?
Автор: Tipulatoid
Дата сообщения: 08.11.2007 12:08
kalkin5

Цитата:
его можно запускать из любой папки или только из папки где установлен iTunes?

В коде Maza Faka надо заменить c:\temp\iTunes на путь, где лежит iTunes и запускать откуда хошь.
На всякий случай сделайте бекап папки iTunes. Если результат работы батника устроит, можно бекап удалить.
Автор: Ruud
Дата сообщения: 09.11.2007 06:43
Есть консольная утилита ttaenc.exe ,ей надо переконвертировать 5000 файлов с расширением tta, она может конвертировать только те файлы которые находятся вместе с ней в одном каталоге.Пробовал делать с помощью команд PushD ,PopD не помогло.Вопрос :можно ли перемещать её последовательно по подкаталогам после завершения операции в каждом из них.
Автор: 01MDM
Дата сообщения: 09.11.2007 08:00
Ruud
Может тебе это поможет:
http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=600
Автор: Ruud
Дата сообщения: 09.11.2007 18:27
01MDM
Спасибо за помощь ,но , к сожалению мне не помогло :я делаю инсталлятор ,после установки должна отработать ttaenc.exe и конвертированные файлы должны остаться в тех же папках ,а в том решении готовые файлы сбрасываются в один каталог.
Автор: 01MDM
Дата сообщения: 09.11.2007 21:06
Ruud
Как раз второй вариант ( Исправлено: Elroir, 21:09 19-01-2007) это и делает, сохраняет файлы в том же каталоге где и исходные.

Цитата:

она может конвертировать только те файлы которые находятся вместе с ней в одном каталоге

Это не так.

Код:
D:\Downloads\ttaenc "D:\Games\Civilization3Conquests\Sounds\Wonder.wav" "%userprofile%\Рабочий стол"
Автор: sanb
Дата сообщения: 10.11.2007 12:13
помогите сделать батник или VB, удаляющий определенную папку в Program Files и ветку в реестре, желательно чтобы при запуске спрашивал удалить да/нет
Автор: Elroir
Дата сообщения: 10.11.2007 13:34
sanb

Код:
@echo off
setlocal
chcp 1251>nul
set /p "ans=Хотите удалить? (y,n) "
if "%ans%"=="y" (
rd /q /s "%programfiles%\Папка"
reg delete "HKLM\Software\MyCo\MyApp" /f
)
Автор: sanb
Дата сообщения: 10.11.2007 13:46
Elroir
спасибо конечно, но вместо "Хотите удалить" каракули, а на VB можно это реализовать, чтобы выскакивало стандартное виндовое окошко "Хотите удалить?", не для себя делаю, а то вид консоли многих пугает, меня в том числе
Заранее благодарен!
Автор: Elroir
Дата сообщения: 10.11.2007 18:16
sanb

Цитата:
вместо "Хотите удалить" каракули

Попробуй убрать "chcp 1251>nul"


Цитата:
а на VB можно это реализовать

Наверняка можно, но ведь топик то про батники.
Такое окошко можно получить с помощью пакета утилит для организации интерфейса в бат-файлах (в шапке, в разделе "Полезные утилиты")
Автор: Mr_SMiT
Дата сообщения: 11.11.2007 07:14
Хочу автоматизировать подключение и Интернету т.е. запустить HandyCache, NetLimiter, Maxthon и само подключение, чтобы осталось нажать только кнопку "Подключить". В автозапуске этих программ нет (убрал т.к. в Интернет выхожу не постоянно), подключение то-же не автоматическое. С программами вроде проблем нет, а вот как Подключение прописать? Запуск ярлыка не помогает - не запускается, да и ярлык какой-то странный, кроме {BA126AD7-2166-11D1-B1D0-00805FC1270E} ничего нет.

Добавлено:
sanb

Цитата:
вместо "Хотите удалить" каракули

Батники лучше писать в старом добром FARe, откройте Ваш батник в нем (F4), нажмите (или не нажимайте, в зависимости от того, что было в прошлый раз) F8 чтобы горело WIN т.е. в данный момент кодировка DOS и замените эти каракули на русский текст.
Автор: Tipulatoid
Дата сообщения: 11.11.2007 15:11
Mr_SMiT

Цитата:
Хочу автоматизировать подключение и Интернету т.е. запустить HandyCache, NetLimiter, Maxthon и само подключение, чтобы осталось нажать только кнопку "Подключить". В автозапуске этих программ нет (убрал т.к. в Интернет выхожу не постоянно), подключение то-же не автоматическое. С программами вроде проблем нет, а вот как Подключение прописать? Запуск ярлыка не помогает - не запускается, да и ярлык какой-то странный, кроме {BA126AD7-2166-11D1-B1D0-00805FC1270E} ничего нет.

Насчет кнопки "Подключить" - это не обещаю; вообще GUI-ёвые окна и диалоги - это не для батников. А само подключение в батнике прописывается просто:

Код: rasdial "название соединения" логин_соединения пароль_соединения
Автор: Mr_SMiT
Дата сообщения: 11.11.2007 19:33
Tipulatoid
Спасибо большое, но если можно пару вопросов:
"" -это для чего?
ping -это если правильно понял вместо таймера?
и с подключением, хотелось бы именно диалог этот вывести


И еще один вопрос
Ситуация такая, делаю sfx, из него автоматом запускается невидимо батник (с помощью hs_exec) вот моя писанина:

@echo off
if not exist "AutoPowerOn.exe" goto err
if exist "AutoPowerOn.rus" goto rus
taskkill /im "AutoPowerOn.exe" /f /t
REG ADD HKCU\Software\Lifsoft\LangManager /v AutoPowerOn.exe /d .smit /f
rename "_AutoPowerOn.rus" "AutoPowerOn.rus"
del uninst.lnk /Q
del "_AutoPowerOn.rus" /Q
del "hs_message.exe" /Q
hs_exec "AutoPowerOn.exe"
del hs_exec.exe /Q
del rureg.bat /Q
goto end
:err
hs_message.exe "Программа Auto Power-on & Shut-down не установлена, либо русификатор устанавливался не в ту папку!" "Русификатор Auto Power-on & Shut-down 2.05" E
del "%USERPROFILE%\Главное меню\Программы\Auto Power-on & Shut-down\Удалить русификатор.lnk" /Q
del uninst.lnk /Q
del hs_exec.exe /Q
del "AutoPowerOn.smit" /Q
del uninstru.bat /Q
del "_AutoPowerOn.rus" /Q
del "hs_message.exe" /Q
del rureg.bat /Q
goto end
:rus
hs_message.exe "Русификатор для Auto Power-on & Shut-down уже был ранее установлен!" "Русификатор Auto Power-on & Shut-down 2.05" E
del uninst.lnk /Q
del hs_exec.exe /Q
del "_AutoPowerOn.rus" /Q
del "hs_message.exe" /Q
del rureg.bat /Q
:end

hs_message и hs_exec утилитки, которые есть в шапке, taskkill -для профилактики, если программы нет , то он проскакивает, goto end - то-же для профилактики т.к. перед этим сам батник удаляется

Так вот, как бы еще проверить размер AutoPowerOn.exe и(или) контрольную сумму и(или) дату создания и оптимизировать это дело и возможно чего-то еще не учел. Желательно чтобы еще в разных Win работало, можно js и vbs. Все это от кривых ручек. Если уже поняли - это русификатор, инсталляторами и патчмейкерами не пользуюсь.
Автор: Tipulatoid
Дата сообщения: 12.11.2007 00:20
Mr_SMiT

Цитата:
"" -это для чего?

Если путь содержит пробелы - его надо заключить в кавычки - это общее правило для консоли. Команда же start воспринимает первый параметр в кавычках как заголовок окна. Поэтому мы сначала ей передаем две кавычки, а потом уже путь. Иначе работать не будет.

Цитата:
ping -это если правильно понял вместо таймера?

Да, верно

Цитата:
и с подключением, хотелось бы именно диалог этот вывести


Код: rasphone -d "Имя соединения"

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.