Заметки на полях: Командные сценарии Windows
- Просмотров: 3073
- Комментариев: 0
- Подписаться на обновления
- Печатать
- Поделиться
Решил поделится некоторыми полезностями при работе с командными сценариями Windows. Присвоить значение переменной из вывода внешней команды без создания промежуточного файла, получение размера файла, получение списка процессов... Список полезностей буду дополнять...
Даная запись будет в формате заметок на полях, т.е. общее описание и пример, для себя - чтоб не забыть...
Вывод внешней команды присвоить переменной
Присвоить переменной chost вывод комманды hostname (имя компьютера)for /f "tokens=* delims=" %%A in ('hostname') do set chost=%%A
Получить размер файла
Переменной fsize присвоить размер файла myfile.txtfor %%A in (myfile.txt) do set fsize=%%~zA
Получить модель компьютера (используя WMI)
Переменной model присвоить значение из WMIfor /f "tokens=2 delims='='" %%A in ('wmic computersystem get model /value') do set model=%%A
Убить процесс по имени
Принудительно (/f) убить процесс с именем (/im) iexplore.exe и всеми дочерними процессами (/t)taskkill /f /im iexplore.exe /p
Проверить наличие процесса
Проверить наличе процесса с именем iexplore.exetasklist /nh /fi "IMAGENAME eq iexplore.exe"
Надежное копирование (robocopy)
Утилита для продвинутого копирования robocopy.exe начиная с Windows Vista и Windows Server 2008 входит в стандартную поставку, для более ранних версий дуступна в составе Windows Resouce Kit. Полную справку можно посмотреть введя "robocopy /?" Я же остановлюсь на основных и наиболее востребованых моментах (для меня во всяком случае)
Общий синтаксис комманды следующий: robocopy <src_path> <dst_path> <files> <copy_params>
src_path | Путь к источнику файлов (папка) |
dst_path | Путь-назначение, куда файлы скопировать (папка) |
files | Имена (с подстановочными знаками) файлов, что нужно скопировать. По умолчанию "*.*" |
copy_params | Параметры копирования |
Для копирования файлов по сети (на удаленные сервера) я использую следующую комманду:
robocopy d:\source_files \\remoteserver\servershare\destination_folder file_for_copy.txt /z /r:20 /w:10 /log+:logfile.log /tee /njs
Ключ | Значение |
---|---|
/z | Копирование файлов с возобновлением |
/r:20 | Колличество повторных попыток копирования при неудаче (по умолчанию 1 000 000) |
/w:30 | Время ожидания между повторными попытками в секундах (по умолчанию 20 секунд) |
/log+:logfile.log | Записать в файл лога состояние выполнение путем добавления в файл, если не указать "+", то файл будет перезаписан |
/tee | Выводить информацию и в консоль, и в файл лога |
/njs | Не выводить суммарную информацию о задании |
Результат выполнения операции можно проверить с помощью переменной errorlevel есть много комбинаций, но я остановлюсь только на основных
Код | Расшифровка |
---|---|
0 | Ошибок не возникло. Копирование не выполнялось. Действий не требуется, файлы идентичны в искочнике и папке назначения. |
1 | Файлы скопированы успешно |
2 | Найдены дополнительные файлы (расширенная информация записывается в лог файл |
4 | Найдены несоответсвия |
8 | Ошибка копирования |
16 | Глобальная ошибка |
Для копирования (обновления резервной копии) текущего состояния папки с изменяемыми файлами и их колличеством:
robocopy d:\source_files \\remoteserver\servershare\destination_folder /z /purge
Ключ /purge используется для удаления из папки назначения файлов, которые больше не существуют в папке источнике.