Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 5
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Урок bat-аники (для начинающих)
· Курс лекций для начинающих. Полезно и просто описано
· Набор GNU утилит для win32
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
· Справка по командам в виде Html
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Пример - получение и обработка списка пользователей
· Уильям Станек - Командная строка Microsoft Windows (вплоть до w2k3)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек)
· Переход из 32-битной версии cmd.exe в 64-битную

Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 12:38 10-03-2009 | Исправлено: TechnicsKuzya, 13:54 27-12-2009
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
SET "RAR=dir "%ProgramFiles%\Rar.exe" /b /s /a"  

Это зачем так? Достаточно просто:

Код:
 
SET RAR="%ProgramFiles%\Rar.exe"
 

 
Добавлено:
А, ты поиск хочешь...

Код:
 
for /f "tokens=*" %%a in ('dir C:\Rar.exe /b /s /a:-d') do set RAR="%%a"
 

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 16:05 07-08-2009 | Исправлено: igor_andreev, 16:12 07-08-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
del

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:11 07-08-2009 | Исправлено: 01MDM, 16:12 07-08-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
 
Всего-то надо было ! Большое спасибо!
 
Ещё маленький вопросик.
 
Ну никак не возвращает полный путь,
всё пишет "C:\Program" не существует или не является каталогом.
Ну оно и понятно, всё дело в пробеле, но я уж проставил кавычки
 везде где можно было, и в реестре путь тоже с кавычками, и всё равно пишет  
( Путь "C:\Program" не существует)
Помогите пжл.
 
Код
 
set "RAR=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"
 
setlocal
for /f "tokens=3" %%a in ('reg query "%RAR%" /v "Path" ^| find /i "Path"') do set "instdir=%%a"
 
explorer "%instdir%\"

 
В этом коде пытаюсь вытянуть путь к RAR.exe
в переменную.
Спс.
 
Вот тот же код , но работает отлично!
 
Код
 
setlocal
for /f "tokens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore\Cfg" /v MachineGuid ^| find /i "MachineGuid"') do set "instdir=%%a"
explorer "%SYSTEMDRIVE%\System Volume Information\_restore%instdir%"

 
Этот код открывает папку System Volume Information,
хотя двойным кликом её не открыть.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 16:20 07-08-2009 | Исправлено: Cosmogor, 16:26 07-08-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cosmogor

Код:
 
@echo off
setlocal
 
set "RAR=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"
for /f "tokens=3*" %%a in ('reg query "%RAR%" /v Path') do set "instdir=%%a %%b"
 
start "" "%instdir%"  
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:34 07-08-2009 | Исправлено: 01MDM, 16:34 07-08-2009
Sergey_Makarov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
 
Есть директория с файлами такого типа:
 
sw11.dat
sw12.dat
sw13.dat
....   и т.д.
 
Часть кода для обработки этих файлов:
 
@C:\tse\tse -s <C:\tse\sw-dat-levBereg\sw11.dat
@ren "D:\tftp\ssss.bac" sw11_%date%.bac
@copy "D:\tftp\sw11_%date%.bac   D:\Network\bac\%date%
@del "D:\tftp /f /q
@rem ***************************************************
@C:\tse\tse -s <C:\tse\sw-dat-levBereg\sw12.dat
@ren "D:\tftp\ssss.bac" sw12_%date%.bac
@copy "D:\tftp\sw12_%date%.bac   D:\Network\bac\%date%
@del "D:\tftp /f /q
@rem ***************************************************
.. и т.д.
 
На каждый файл *.dat приходится добавлять такую часть кода,
итересует можно ли сделать цикл перебора этих файлов, чтобы  
не дописывать часть кода  при добавлении нового файла *.dat

Всего записей: 2 | Зарегистр. 07-08-2009 | Отправлено: 17:14 07-08-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем большое спасибо,  
Великое дело всё таки эти батники!

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 17:21 07-08-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sergey_Makarov
Перебрать файлы можно так:

Код:
 
@echo off
 
for %%i in ("C:\tse\sw-dat-levBereg\sw*.dat") do (
 
    твой блок кода, где вместо названия файла - "%%i"
    т.е, например: C:\tse\tse -s <"%%i"  
 
)
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:39 07-08-2009 | Исправлено: 01MDM, 17:41 07-08-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
 
Помогите со скриптом
Нужно осуществить поиск по всем дискам(кроме диска А
папки MENU, эта папка всегда находится в корне диска,
и открыть найденную папку MENU командой explorer.
Только есть одна проблема: Диск где находится папка  
неизвестен.
Ниже скрипт, но я с ним намудрил конкретно.
 
Код
 
setlocal enabledelayedexpansion
for %%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:\MENU>nul 2>&1 && set zz=!zz!,%%d
echo %zz%
 
explorer "%zz%"

 
Спс.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 15:00 08-08-2009
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cosmogor

Код:

for %%a 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 %%a:\MENU\NUL explorer %%a:\MENU


Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 16:27 08-08-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
 
Круто, работает как надо!
Жаль, что я не смог разобраться.
Скажи, а зачем в коде NUL?
Остальной код я понял.
 
Спс.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 19:36 08-08-2009
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cosmogor
NUL - виртуальное устройство, присутствует в любой папке.
IF EXIST MENU\NUL - означает "если существует директория MENU"
В корне диска может же и файл оказаться с таким названием и без расширения, тогда все пойдет не так, как задумано... В принципе для указания именно папки, а не файла, можно ограничиться просто слешем на конце, без NUL.  
IF EXIST MENU\
 

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 22:43 08-08-2009 | Исправлено: igor_andreev, 22:45 08-08-2009
Cosmogor



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
igor_andreev
 
Спасибо, ответ исчерпывающий.


----------
(Цитата)
Я бы изменил весь мир, но бог не даёт исходников.

Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 22:45 08-08-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы на засыпку (чисто для личного развития, а так же собеседников данной темы)
 
Задача №1
 
Например, батник создает другой батник и запускает его (или же запускает любой исполняемый файл). Данный файл некоторое время работает, потом завершаться сам...
 
как первым батником создать например скрипт, который покажит строку прогресса запускаемого файла, ну то-есть будет ползти ровно столько времени, сколько выполняеться файл...
На худой конец, можно ли указать эту же строку в самом батнике по типу появляющихся точек в окне cmd в строчку...
 
время исполнения 2-о файла от запуска до завершения заранее известны (а будет лучше если нет)
 
То есть, мне надо как-то дать понять юзеру, скока примерно займет времени выполнение сего...
 
 
 
Задача №2
 
В батник необходимо передать адрес к некоему файлу... Только что бы сриптом запускалось окно (explorer) с деревом слева и окном выбора файла справа...
 
такой вариант не катит ->

Код:
@echo off
set wndw=Specify the path to the file:
set titl=Enter path file
set expl=%windir%\system32\calc.exe
set tmp=%temp%\~.vbs
title %titl%
echo wscript.echo inputbox("%wndw%","%titl%", "%expl%")>%tmp%
for /f "delims=" %%a in ('cscript //nologo "%tmp%"') do set my_set=%%a
del %tmp%
echo File path: %my_set%
pause >nul

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 10:05 09-08-2009
ildarchikk

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Подскажите, можно ли в батче в имени файла отрезать сзади определённое число символов?
Т.е. к примеру была переменная abc1234.mp3 - мне надо получить переменную abc12.

Всего записей: 68 | Зарегистр. 24-07-2003 | Отправлено: 11:16 09-08-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf

Цитата:
В батник необходимо передать адрес к некоему файлу... Только что бы сриптом запускалось окно (explorer) с деревом слева и окном выбора файла справа...


Код:
 
@echo off
setlocal
 
set /p file="Enter full path to the file: "
call:open "%file%"
goto:eof
 
:open
explorer /e,/root,"%~dp1",/select,"%~f1"
 

 
 
Добавлено:
ildarchikk

Цитата:
Здравствуйте.
Подскажите, можно ли в батче в имени файла отрезать сзади определённое число символов?
Т.е. к примеру была переменная abc1234.mp3 - мне надо получить переменную abc12.

 

Код:
 
@echo off
setlocal
 
set "filename=abc1234.mp3"
set "filename=%filename:~0,-6%"
echo %filename%
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:11 09-08-2009 | Исправлено: 01MDM, 12:35 09-08-2009
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScreamWolf
1.

Код:

@echo off
for /l %%a in (1,1,80) do set /p ="."<nul & ping -n 1 localhost>nul 2>&1

В выполняющемся в данный момент батнике отключи вывод всех команд и ошибок на экран и вставляй изредка по тексту set /p ="."<nul

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 12:21 09-08-2009
ildarchikk

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Огромное спасибо, вы мне Очень помогли

Всего записей: 68 | Зарегистр. 24-07-2003 | Отправлено: 12:47 09-08-2009
vovanius1

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Э... Предлагаю присутствующим сильно не бить и не пинать если такое было уже... прочитать все от начала не смог. Итак: есть скрипт, надо чтоб он исполнялся только в единственном экземпляре, а если его по ошибке запустить в двух экз., то этот второй должен понять, что уже один запущен, и молча и ничего не делая закрыться. Вариант if exist с созданием вначале некоего файла-ключа и удалением его в конце не подходит, ибо скрипт рассчитан на ручное закрытие по крестику в любой момент, а значит, удалить ключ не сможет. Спасибо.
 
ЗЫ. ОС Виста, если это имеет значение, там вроде несколько новых команд добавили. Порадовала долгожданная timeout

Всего записей: 278 | Зарегистр. 17-02-2007 | Отправлено: 16:19 09-08-2009 | Исправлено: vovanius1, 16:23 09-08-2009
igor_andreev

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vovanius1
Под 2000\XP можно pv юзать http://www.teamcti.com/pview/pv_5_2_2.zip

Код:

@echo off
pv cmd.exe -l"*\%~nx0*" -n >nul 2>&1
if not "%errorlevel%"=="-1" exit /b
 
Работает ли в висте - не знаю, попробуй.

Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 17:39 09-08-2009
ScreamWolf



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM

Цитата:
@echo off
setlocal
 
set /p file="Enter full path to the file: "
call:open "%file%"
goto:eof
 
pen
explorer /e,/root,"%~dp1",/select,"%~f1"  

ты меня не правильно понял...

Цитата:
В батник необходимо передать адрес к некоему файлу... Только что бы сриптом запускалось окно (explorer) с деревом слева и окном выбора файла справа...
 

set /p и inputbox("Текст","Титул", "Пример") не катит, нужно что бы что-то вроде (или именно) окно windows открывалась с выбором файла...
Примерно так можно?
   
 
 
 
igor_andreev

Цитата:
@echo off
for /l %%a in (1,1,80) do set /p ="."<nul & ping -n 1 localhost>nul 2>&1  

Отличный пример... тока вот время от чего зависит...
попробовал сменить ping -n <X> где x - как я думал будут секунды, но увы не то...
 
А еще было бы лучше если использовать скрипт какой нить чтоб виндусовскую строку (как через msiexec) в окошечке отдельном показал)))
 
 
Добавлено:
igor_andreev

Цитата:
@echo off
for /l %%a in (1,1,80) do set /p ="."<nul & ping -n 1 localhost>nul 2>&1  

 
подредактировал))

Код:
@echo off
echo.
echo                                  Ћ¦Ё¤ ©вҐ
echo.
for /l %%a in (1,1,80) do set /p ="Ы"<nul & ping -n 1 localhost>nul 2>&1
echo.
cls
echo.
echo                                 ‚лЇ®«-Ґ-®!
echo.
echo ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
pause >nul

 
Добавлено:
01MDM

Цитата:
@echo off
setlocal
 
set "notepad=C:\Windows\System32\notepad.exe"
call:set "%notepad%"
 
echo %disk%
for /f "tokens=2 delims==" %%i in ('set path_') do echo %%i
echo %filename%
goto:eof
 
:set
set "filename=%~nx1"
set "disk=%~d1"
 
ath
set /a tok+=1
for /f "tokens=%tok% delims=\" %%i in ("%~p1") do (
   if not "%%i"=="" (
       set "path_%tok%=%%i"
       goto:path
   ) else (
       goto:eof
   )  

работает спс... но думаю дальше...

Всего записей: 197 | Зарегистр. 15-05-2009 | Отправлено: 18:20 09-08-2009 | Исправлено: ScreamWolf, 18:28 09-08-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Widok (03-03-2010 16:29): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru