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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Sergey_AV



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

Цитата:
а на Программирование "удобняшек" на VBScript  http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=1491#1   -  спрашивали?

Нет. Надо спросить, пожалуй...

Всего записей: 2336 | Зарегистр. 05-03-2002 | Отправлено: 14:39 16-11-2009
nValka

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
возможноли (и если да то как) в bat-файле разобрать строку по слова?
имеется строка "1111 222222 33333 44444" и нужно обработать слова в ней по отдельности.
Количество слов в строке заранее не известно. Подозреваю что нужно использовать for. но как заставить его перебрать все слова непойму.

Всего записей: 106 | Зарегистр. 21-11-2006 | Отправлено: 16:23 16-11-2009 | Исправлено: nValka, 16:27 16-11-2009
kvanto2

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

Всего записей: 3 | Зарегистр. 16-11-2009 | Отправлено: 16:52 16-11-2009 | Исправлено: kvanto2, 00:16 17-11-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть утилита командной строки для смены даты создания у файла?

Всего записей: 2682 | Зарегистр. 16-10-2003 | Отправлено: 17:57 16-11-2009
mugil_cephalus

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
а поищи по поиску - точно где-то видел решение, уже не помню (или еще здесь поищи - Задачи на bat-файлах )

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



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

Цитата:
Есть утилита командной строки для смены даты создания у файла?


Код:
 
nircmd setfiletime
 

 
 
 
 
Добавлено:
nValka

Цитата:
возможноли (и если да то как) в bat-файле разобрать строку по слова?
имеется строка "1111 222222 33333 44444" и нужно обработать слова в ней по отдельности.  

При каждой итерации цикл for будет выводить отдельное слово:

Код:
 
@echo off
for %%i in (1111 222222 33333 44444) do (
    echo Doing Something with %%i
)
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:21 16-11-2009
nValka

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
01MDM
а ларчик та просто открывался. спасибо. а я зачемто c /F использовал.

Всего записей: 106 | Зарегистр. 21-11-2006 | Отправлено: 00:00 17-11-2009 | Исправлено: nValka, 00:05 17-11-2009
MoBiRo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть папка  и в ней файлы. Надо узнать дату самого старого файла и самого нового, переделать их в формат yyyy.mm.dd в две разные переменные.
Мне пока удалось найти самый старый файл и перевернуть его дату, а вот с самым новым проблема =(  
 

Код:
 
@echo off
cd SameDir
dir /b /o:-d>filenames.tmp
for /f "tokens=*" %%I in (filenames.tmp) do set FILENAME=%%I & set FILETIME=%%~tI
set olddate=%FILETIME:~6,4%%FILETIME:~2,4%%FILETIME:~0,2%
erase filenames.tmp
cd %~dp0%
echo %olddate%
pause
exit
 

 
Тут выходит так, что имя самого нового файла записывается вторым в файл filenames.tmp (т.к. самым новым будет filenames.tmp, мы его только что создали, а он мне не нужен). Вот надо найти дату файла, чье имя записано во второй строке =(  

Всего записей: 68 | Зарегистр. 11-11-2009 | Отправлено: 10:38 17-11-2009 | Исправлено: MoBiRo, 10:41 17-11-2009
mugil_cephalus

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
действительно все так прозаично -
Цитата:
а ларчик та просто открывался. спасибо. а я зачемто c /F использовал.
- и я думал про for /f delims=space и 52 токена

Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 11:13 17-11-2009
01MDM



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

Код:
 
@echo off
setlocal
 
for /f %%a in ('dir /b /o:-d') do (
    if not defined new (
        for /f "tokens=1-3 delims=. " %%i in ("%%~ta") do set "new=%%k.%%j.%%i"    
    ) else (
        set "old=%%~ta"
    )
)
 
for /f "tokens=1-3 delims=. " %%i in ("%old%") do set "old=%%k.%%j.%%i"
 
echo %new%
echo %old%
 

 
mugil_cephalus
Это все равно не универсальное решение. Строка может содержать подвыражения в кавычках и прочие непредсказуемости.
 

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

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

Цитата:
Строка может содержать подвыражения в кавычках и прочие непредсказуемости.

1 оператор ehco "вопринял" бы переменную итератора со значением - [кавычки]  
 
n: 3 "text" 8
 
W:\>for /f "tokens=1-3" %a in ('type n') do echo _%a%b%c_
 
W:\>echo _3"text"8_
_3"text"8_
 
W:\>
 
2 а оператор set "вопринял" бы переменную итератора и со значением, включающим не только кавычки, но и спецсимволы < > & (кроме символа = )
 
W:\>for /f "tokens=3 delims=: " %i in ('"type n2"') do set "var1=%i"
 
W:\>set "var1=//login.site.com/app/signup/confirm.cgi?u=name1&uid=2074563"><font"
 
W:\>set
...................
var1=//login.site.com/app/signup/confirm.cgi?u=name1&uid=2074563"><font
windir=F:\WINDOWS
 
W:\>
 

Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 13:49 17-11-2009 | Исправлено: mugil_cephalus, 13:57 17-11-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mugil_cephalus
Я имел ввиду простой цикл for, например:

Код:
 
@echo off
for %%i in (111 222 "333 333" 444) do echo %%i
for %%i in (111 222"333 333"444) do echo %%i
 

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как прописать в батнике путь к другому батнику который находится в папке рядом,  только он не конкретный (путь) флешка.  Это вообще реально?

Всего записей: 14 | Зарегистр. 17-11-2009 | Отправлено: 18:01 17-11-2009
01MDM



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

Код:
 
%~d0  - возвращает диск на котором находится батник
"%~d0\Path\To\batch2.cmd" - полный путь ко второму батнику
 

Или можно использовать относительные пути, но с условием - относительный путь берется из текущей директории. Т.е. сначала надо перейти в директорию батника:

Код:
 
pushd "%~dp0"
call "..\Folder2\batch2.cmd"
popd
 
 

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:19 17-11-2009
MoBiRo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
А вот если в папке только один файл, то %old% будет пустым! =(
Я не понимаю почему у меня не получается сделать:
 

Код:
if %old% equ " " (
set %old%=%new%)

 
Говорит: Непредвиденное появление " ".
 
А если запускать не через bat-файл, а через cmd.exe, то при первом запуске выскакивает ошибка Непредвиденное появление " "., а когда ты второй раз запускаешь программу, то ошибки нету и всё работает как надо =\ Вот такой странный глюк. Подскажи что я написал не так. Я уже и ' ' попробовал, и без пробела "" и '', знак равенства ставил, даже двойное равенство написал было =(

Всего записей: 68 | Зарегистр. 11-11-2009 | Отправлено: 10:11 18-11-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Спасибо за наводку на nircmd. Правда это работает если у файла не стоит рид-онли, т.е. перед изменением надо снимать защиту. А при защите ничего не меняет и никаких ошибок не даёт.

Всего записей: 2682 | Зарегистр. 16-10-2003 | Отправлено: 10:46 18-11-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MoBiRo
У меня, если в папке только один файл, то %old% и %new% имеют одинаковое значение. Батник не изменял?

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:59 18-11-2009
MoBiRo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
только setlocal удалил и сделал cd MyDirectory
 
 
Добавлено:
Вернул setlocal, ничего не изменилось, в %old% всё-равно пусто. Ты лучше скажи почему мой if выдаёт ошибку =(
 
Добавлено:

Цитата:
У меня, если в папке только один файл, то %old% и %new% имеют одинаковое значение. Батник не изменял?

Создал папку, закинул туда твой батик, дописал в него pause, запускаю - выводит только %new% дату самого батика, %old% - пусто =( Ничего не менял просто паузу в самом конце дописал. В папке только батик. Не знаю как у тебя это может работать.
 
Добавлено:
У тебя наверное в папке помимо бата ещё что-то было, у меня с одним файлом (самим батом) ничего не выходит, %old% пустой. Даже если сделать cd на папку, где всего лишь один файл-то он будет пустым... Кстати, твоя программа твой макрос почему-то не находит файлы с пробелами в имени. Мне это не надо, но если есть возможность, то надо бы исправить...

Всего записей: 68 | Зарегистр. 11-11-2009 | Отправлено: 11:36 18-11-2009
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MoBiRo
Извиняюсь, просто я использовал `dir /b /o-d` без маски и батник прихватывал сам себя.
Измени так:

Код:
 
if "%old%" equ "" (set "old=%new%")  
 

Т.е если %old% пустая (т.е ее нет) то в условии вернутся только кавычки. Или используй `if not defined old`
 
 
 
Добавлено:

Цитата:
почему-то не находит файлы с пробелами в имени.

Добавь в:

Код:
 
for /f "tokens=*" %%a in ('dir /b ....
 


Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:54 18-11-2009
MoBiRo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, работает =) Я не додумался %old% взять в кавычки)))
 
Добавлено:
В общем я тут пыхтел над одной штукой, которая вырезает из фотоаппарата фото и видео файлы и переносит на комп в нужную мне папку =)) Казалось бы всё очень просто, но вот нахождение даты файлов меня озадачило)) Может кому-нибудь пригодиться кодик, можно в шапку закинуть.
 
Код макроса по вырезанию фото и видео файлов с фотоаппарата =)

Всего записей: 68 | Зарегистр. 11-11-2009 | Отправлено: 12:13 18-11-2009 | Исправлено: MoBiRo, 13:13 18-11-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.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru