Разработать пакетный файл для установки даты и времени параметры в командной строке
Для выполнения поставленной задачи можно перебрать в цикле все файлы с расширением txt, проверяя перед копированием имя каждого из этих файлов:
REM Проверка наличия параметра командной строки
IF -%!==- GOTO NoDir
RЕМ Копирование нужных файлов
FOR %%f IN (*.txt) DO IF NOT -%%f==-%2 COPY %%f %1
GOTO End
ECHO He указан каталог для копирования!
PAUSE
3. Задание аналогично второму упражнению. Дополнительные требования:
а) переписывать только те файлы, которые новее одноименных в каталоге - приемнике,
б) не прерывать копирование в случае возникновения ошибки,
в) записывать в файл logcopy.txt имя каждого копируемого файла и результат выполнения операции для него.
Другими словами, файл logcopy.txt должен быть примерно таким:
Успешно: а.txt
Ошибка : b.txt
Успешно: с.txt
В этом упражнении нужно создать два пакетных файла. В основном файле работает такой же цикл for, как и в предыдущем упражнении, однако вместо непосредственного выполнения команды copy здесь вызывается командный файл 3_1. bat:
REM Проверка наличия параметра командной строки
IF -%1==- GOTO NoDir
REM Вызов в цикле файла 3_l.bat для копирования нужного файла
FOR %%f IN (*.txt) DO IF NOT -%%f=-%2 CALL 3_l.bat %%f %1
GOTO End
ECHO He указан каталог для копирования!
PAUSE
Вызываемый в цикле файл 3_1.bat имеет следующее содержимое:
REM Копирование файла
XCOPY %1 %2 /D /С > NUL
REM Проверка успешности копирования
IF ERRORLEVEL 0 GOTO Success
REM Запись в файл отчета информации об ошибке при копировании
ECHO Ошибка: % 1 >> logcopy.log
GOTO End
REM Запись в файл отчета информации об успешном копировании
ECHO Успешно: %1 >> logcopy.log
4. Создать командный файл, который выводил бы содержимое каталога, указанного в качестве параметра командной строки, причем пользователю должна быть предоставлена возможность выбора с помощью меню устройства для вывода: на экран (информация выводится по одному
экрану), в текстовый файл c:\catalog.txt или на принтер.
Следующий простой пакетный файл не требует дополнительных пояснений:
CLS
IF -%1==- GOTO NoDir
RЕМ Вывод меню на экран
ECHO A - На экран
ECHO Б - В файл C:\catalog.txt
ECHO В - На принтер
КЕМ Вывод подсказки для ввода
CHOICE /С:AБВ Куда выводить содержимое %1
CLS
КЕМ Определение сделанного выбора
IF ERRORLEVEL 3 GOTO DirToPrn
IF ERRORLEVEL 2 GOTO DirToFile
IF ERRORLEVEL 1 GOTO DirToCon
ECHO Выбор не был сделан.
GOTO End
DIR %1 | MORE
GOTO End
DIR %1 > C:\catalog.txt
GOTO End
GOTO End
ECHO He указан каталог для сканирования!
PAUSE
ЗАДАНИЯ
№ | Задание |
Разработать пакетный файл для обновления архива. Выбор архиватора осуществляется из меню. Имя архива передается в командной строке. | |
Разработать пакетный файл для очистки подкаталога с подтверждением. | |
Разработать пакетный файл для проверки дисков (каталогов) на вирусы. Диск выбирается из меню. Имя антивирусной программы - в командной строке (например:drwebw.exe или avp.exe и др.). | |
Разработать пакетный файл для выбора из меню на запуск одного из нескольких редакторов (notepad, ncedit и др.) для редактирования требуемого файла. Имя файла передается в командной строке. | |
Разработать пакетный файл для архивации файлов в каталогах и подкаталогах (по отдельности в каждом каталоге) и удаления архивных файлов. Имена каталога и архиватора - в командной строке. | |
Разработать пакетный файл для построения системы студенческих каталогов с запросом на создание каталогов требуемых курсов, групп и запросом максимального числа пользователей в группе. Номера курсов и шифры групп - в командной строке. | |
Разработать пакетный файл для перехода студента в личный каталог. Группа выбирается из меню, курс передается в командной строке | |
Разработать пакетный файл для установки даты и времени (параметры – в командной строке) | |
Разработать пакетный файл для очистки студенческих каталогов: удаления файлов *.BAK, *.TMP и др. Номера очищаемых курсов передаются в командной строке. | |
Разработать пакетный файл для вывода (на экран, файл) списка файлов из каталогов студентов. Шифр группы - из командной строки, направление вывода - из меню. | |
Разработать пакетный файл для перехода в каталог студента, если он существует и его архивирования | |
Разработать пакетный файл для вывода текстового файла на экран по страницам. Имя файла передается в командной строке. | |
Разработать пакетный файл для перезаписи файлов документов (*.doc, *.txt) из одного каталога в другой с обновлением | |
Разработать пакетный файл для копирования всех файлов документов (*.doc, *.txt) из всех студенческих подкаталогов в директорию «Мои документы» | |
Разработать пакетный файл для проверки наличия файлов документов (*.doc, *.txt) в данном подкаталоге (имя – в параметрах). В случае положительного ответа – вывести их список |
ЛИТЕРАТУРА
1. Финогенов Ms-Dos: Самоучитель по системным функциям, Горячая линия-телеком, 2001, 382 стр.
2. Панкратов Операционная система MS-DOS 6.22: Справочное пособие, Познавательная книга плюс, 2001, 224 стр.
3. Губин А. Работа в Ms-Dos для всех: Практическое пособие, Радио и связь, 1993, 160 стр.
4. Франкен Г., Молявко С. MS-DOS 6.2 для пользователя, Киев, BHV, 1994, Москва, БИНОМ, 1994.
5. Фигурнов В. IBM PC для пользователя, г.Уфа, НПО “Информатика и Компьютеры”, 1993.
6. Руководство по программированию под управлением MS DOS:Пер.с фр./Пьеро Ф.,Люкзак Ж.-Л.,Рейко Ф.;Под ред.Пьеро Ф..-М.:Радио и связь,1995.-544с.
в пакетном скрипте Windows (Windows XP) мне нужно отформатировать текущую дату и время для последующего использования в именах файлов и т. д.
Это похоже на вопрос переполнения стека как добавить дату в пакетные файлы, но со временем.
у меня это до сих пор:
есть ли способ, которым я могу разрешить однозначный час в %TIME%, чтобы я мог получить следующее?
Я закончил с этим скриптом:
:: на WIN2008R2, например, мне нужно было сделать ваш " установить месяц=%дата:
3,2%", как показано ниже :: в противном случае 00 появляется в течение месяца
Если PowerShell установлен, то вы можете легко и надежно получить дату / время в любом формате, например:
конечно, в настоящее время PowerShell всегда установлен, но в Windows XP вы, вероятно, захотите использовать этот метод, только если ваш пакетный скрипт используется в известной среде, где вы знаете, что PS доступен (или проверьте свой пакетный файл, если PowerShell доступен. )
вы можете разумно спросить: зачем вообще использовать пакетный файл, если вы можно использовать PowerShell для получения даты / времени, но я думаю, что некоторые очевидные причины: (a) вы не так хорошо знакомы с PowerShell и по-прежнему предпочитаете делать большинство вещей старомодным способом с пакетными файлами или (b) вы обновляете старый скрипт и не хотите переносить все это в PS.
я столкнулся с этой проблемой сегодня и решил ее с помощью:
Он заменяет пробелы на 0s и в основном нулевые колодки в час.
после некоторого быстрого поиска я не узнал, требуются ли расширения команд (все еще работал с SETLOCAL DISABLEEXTENSIONS).
Я обычно делаю так, когда мне нужна дата/время:
Это для немецкого формата даты/времени (dd.мм гггг чч: мм: СС). В основном я объединяю подстроки и, наконец, заменяю все пробелы нулями.
краткое объяснение того, как работают подстроки:
таким образом, чтобы получить только год от даты, как "29.03.2018" использовать:
Как уже отмечалось, разбор даты и времени полезен только в том случае, если вы знаете формат, используемый текущим пользователем (например, MM/dd/yy или dd-MM-yyyy просто назвать два). Это может быть определено, но к тому времени, когда вы сделаете все стресс и разбор, вы все равно окажетесь в ситуации, когда используется неожиданный формат, и потребуется больше настроек.
вы также можете использовать некоторую внешнюю программу, которая вернет date slug в предпочтительном формате, но это имеет недостатки необходимости распространять служебную программу с вашим скриптом / пакетом.
есть также пакетные трюки с использованием часов CMOS довольно сырым способом, но это слишком близко к голым проводам для большинства людей, а также не всегда предпочтительное место для получения даты/времени.
ниже-это решение, которое позволяет избежать вышеуказанных проблем. Да, это вводит некоторые другие проблемы, но для моих целей я нашел это самым простым, ясным, самым портативным решением для создание метки данных .bat файлы для современных систем Windows. Это всего лишь пример, но я думаю, вы увидите, как изменить для других форматов даты и/или времени и т. д.
следующее Может быть не прямым ответом, а близким?
по крайней мере, это может быть вдохновляющим.
Если вам точно не нужен этот формат:
тогда вы можете использовать следующее 3 строки кода который использует %date% и %time%:
Примечание: символы / и : удаляются и символ . и Пробел заменяется знаком подчеркивания.
пример вывода (взято в среду 8/5/15 в 12: 49 вечера с 50 секундами и 93 миллисекундами):
на offset:length форматирование поддерживается с SET команда в Windows не позволит вам заполнить 0 как вы, кажется, заинтересованы.
однако вы можете закодировать пакетный скрипт, чтобы проверить, что час меньше 10 и
pad соответственно с другим echo строку.
вы также можете перейти на другие методы программирования, чтобы добраться сюда.
это довольно просто в unix bash (доступно с Cygwin на Windows), чтобы просто сказать,
Использование bat-файлов (иначе – «батник», «пакетный файл») часто может облегчить Вашу работу, например, автоматизировать установку программного обеспечения, по заранее заданным параметрам; синхронизация даты и времени; запуск последовательностей команд и прочее. Однако для использования подобных скриптов нужно уметь их создавать. По своей сути файлы с расширением .bat являются набором консольных команд, таких же, какие используются в командной строке.
В статье рассмотрены три метода создания .bat файлов:
- С помощью командной строки.
- С помощью программы «Блокнот».
- С помощью утилиты «Dr.Batcher».
Создание пакетного файла с помощью командной строки
Шаг 1. Для запуска командной строки в меню «Пуск» используйте диалог «Найти программы и файлы» Вы должны задать параметр поиска cmd и кликнуть левой кнопкой мыши по пиктограмме в разделе «Программы».
Шаг 2. Для хранения написанных батников рекомендуется использовать отдельную директорию, поэтому выберите место на Вашем жестком диске и создайте специальную папку, путем ввода команды «MD D:\Bat».
На заметку! Команда вводится без кавычек, пробел ставится только после использования MD. В описываемом случае папка с именем «Bat» будет создана на диске D. Командная строка нечувствительна к регистру, то есть результат выполнения «MD D:\Bat», «md D:\Bat» и «md d:\Bat» будет одинаков.
Шаг 3. Создайте собственно батник командой «@echo off > D:\Bat\probnik.bat».
Шаг 4. Для изменения содержимого файла следует открыть место его хранения, вызвать контекстное меню и выбрать строку «Изменить».
Создание пакетного файла с помощью программы «Блокнот»
Шаг 1. Для запуска блокнота войдите в меню «Все программы», пункт «Стандартные» и щелкните по запускающей пиктограмме.
Шаг 2. Укажите, какие команды должен выполнять bat файл.
В качестве примера предлагаем Вам использовать следующий код, выводящий изображение звезды:
mode con cols=32 lines=50
88888888888888881888888888888888,
88888888888888811188888888888888,
88888888888888111118888888888888,
88888888888881111111888888888888,
88888888888811111111188888888888,
88888888888111111111118888888888,
88888888881111111111111888888888,
11111111111111111111111111111111,
88111111111111111111111111111188,
88811111111111111111111111111888,
88881111111111111111111111118888,
88888111111111111111111111188888,
88888811111111118111111111888888,
88888111111111188811111111188888,
88881111111111888881111111118888,
88811111111118888888111111111888,
88111111111188888888111111111188,
81111111111888888888811111111118
Внимание! Код должен вводиться без кавычек. Всегда проверяйте синтаксис написания команд. Если Вы забудете поставить запятую в конце какой-либо строки, то при выполнении программы она сольется с последующей.
Шаг 3. Сохраните получившийся файл в нужную директорию. Для изменения разрешения используйте строку «Тип файла», в ней следует выбрать «Все файлы», а при вводе имени, после точки, укажите «bat».
Создание пакетного файла с помощью утилиты «Dr.Batcher»
Указанный программный продукт является платным, но предоставляет возможность использовать тестовую версию в течение 30 дней.
Шаг 1. Для создания файла воспользуйтесь меню «File», пункт «New…» или комбинацией клавиш «Ctrl+N».
Шаг 2. В диалоговом окне отметьте «Empty Batch File» и нажмите «ОК».
Шаг 3. Укажите, какие команды должен выполнять bat файл.
На заметку! В правом фрейме имеются ключевые команды, которые Вы можете использовать при написании кода. Достаточно выделить нужную и нажать на кнопку «Insert Command», что помогает сэкономить время при работе.
Шаг 4. Сохраните получившийся файл в нужную директорию.
Важно! Обратите внимание, что указанная утилита позволяет производить отладку программы «на лету». Достаточно воспользоваться меню «Batch», чтобы произвести запуск уже введенной последовательности. Ход выполнения отображается в нижнем фрейме. При использовании пункта «Execute in External Window…» будет произведено выполнение пакетного файла, аналогичный его запуску средствами операционной системы.
Заключение
Мы описали три способа создания файлов с расширением .bat. Два из указанных методов являются стандартными способами, доступными вместе с Windows, один требует установки дополнительного программного обеспечения. Оценка каждого из способов приведена в сводной таблице.
Поставка с Windows
Поставка с Windows
В зависимости от версии Windows
В зависимости от версии Windows
В зависимости от версии
Обновление: теперь, когда в 2016 году я буду использовать PowerShell для этого, если у него нет убедительной обратной совместимости, особенно из-за проблем с региональными настройками с использованием date . См. @npocmaka qaru.site/info/16145/.
Какие операторы командной строки Windows, которые я могу использовать для получения текущего datetime в формате, который можно поместить в имя файла?
На самом деле я не возражаю против формата даты, в идеале это будет yyyy-mm-dd, но все простое в порядке.
Пока у меня это есть, что на моей машине дает мне Tue_10_14_2008_230050_91 :
Я могу жить с этим, но это кажется немного неуклюжим. В идеале это было бы более кратким и иметь формат, упомянутый ранее.
Я использую Windows Server 2003 и Windows XP Professional. Я не хочу устанавливать дополнительные утилиты для достижения этого (хотя я понимаю, что есть некоторые, которые будут делать красивое форматирование даты).
ОТВЕТЫ
Ответ 1
Если вы предпочитаете время в 24-часовом/военном формате, вы можете заменить вторую строку FOR следующим образом:
Если вы хотите, чтобы дата была независимо от дневного/месячного заказа региона, вы можете использовать "WMIC os GET LocalDateTime" в качестве источника, поскольку он находится в порядке ISO:
Используя его в CMD script, чтобы получить отметку времени в любом требуемом формате:
Извлечение информации о дате/времени из любого ссылочного файла.
Добавление в файл информации о дате/времени:
date.exe часть бесплатных инструментов GNU, которые не требуют установки.
ПРИМЕЧАНИЕ. Копирование date.exe в любой каталог, находящийся в пути поиска, может привести к сбою других сценариев, которые используют встроенную команду date для Windows.
Ответ 3
Еще два способа, которые не зависят от настроек времени (оба взяты из : как получить данные/время независимо от локализации:). И оба получают день недели, и ни один из них не требует прав администратора!:
MAKECAB - будет работать на КАЖДОЙ системе Windows (быстро, но создает небольшой временный файл) (foxidrive script):
ROBOCOPY - это не встроенная команда для Windows и XP и Windows Server 2003, но это может быть скачано с microsoft сайт. Но он встроен во все: от Windows Vista и выше:
И еще три способа использования других языков Windows script. Они придадут вам большую гибкость, например. вы можете получить неделю года, время в миллисекундах и т.д.
JScript/пакетный гибрид (необходимо сохранить как .bat ). JScript доступен на каждой системной форме NT и выше, в составе Windows script Host (хотя может быть отключен через реестр, это редкий случай):
VSCRIPT/BATCH hybrid (Возможно ли внедрить и выполнить VBScript в пакетном файле без использования временного файла?) в том же случае, что и JScript, но гибридизация не так совершенна:
Чтобы использовать его из пакетного файла:
Logman Это не может получить год и день недели. Он сравнительно медленный, а также создает временный файл и основан на отметках времени, которые logman ставит на свои файлы журналов. Он будет работать на всех, начиная от Windows XP и выше. Вероятно, он никогда не будет использоваться кем-либо - включая меня - но это еще один способ.
Еще один способ: WMIC, который также дает неделю года и день недели, но не миллисекунды (для миллисекундного ответа на запрос foxidrive):
С помощью TYPEPERF с некоторыми усилиями быть быстрыми и совместимыми с различными языковыми настройками и как можно быстрее:
MSHTA позволяет вызывать методы JavaScript, похожие на метод JScript, продемонстрированный в № 3 выше. Имейте в виду, что свойства объекта JavaScript Date с месячными значениями нумеруются от 0 до 11, а не от 1 до 12. Таким образом, значение 9 означает октябрь.
Ответ 4
Здесь вариант из alt.msdos.batch.nt, который работает локально независимо.
Поместите это в текстовый файл, например. getDate.cmd
Чтобы получить код для работы sans error msg в stderr, мне пришлось добавить одинарные кавычки, аранжировать переменные для %% a, %% b и %% c. Моя локаль (PT) вызывала ошибки на одном этапе цикла/синтаксического анализа, когда выполнялось выполнение таких действий, как "set = 20". Кавычки дают токен (хотя и пустой) для левой части оператора присваивания.
Недостатком являются беспорядочные имена переменных локали: 'yy', 'mm' и 'dd'. Но эй, кто заботится!
Ответ 5
Я использую это (опять же не независимое от региона (Великобритания))
Ответ 6
К сожалению, это не застраховано от региональных настроек, но делает то, что вы хотите.
Удивительно, что вы можете найти на Wikipedia.
Ответ 7
Первые четыре строки этого кода предоставят вам надежные переменные YY DD MM YYYY HH Min Sec в Windows XP Professional и выше.
Ответ 8
Пожалуйста, используйте следующий script, чтобы получить текущий день в командной строке:
Ответ 9
Обратите внимание, что оба моих ответа здесь все еще зависят от порядка дня и месяца, как это определено региональными настройками, - не уверен, как обойти это.
Ответ 10
Ответ 11
Это не очень краткий, но может быть более гибким (кредит):
Ответ 12
Здесь можно получить дату в одной строке:
В США это выведет "yyyy-mm-dd hhmm". Различные региональные настройки приведут к разным выходам% date%, но вы можете изменить порядок маркеров.
Если вам нужен другой формат, измените инструкцию эха, изменив токены или используя разные (или нет) разделители.
Ответ 13
Ответ 14
Просто используйте эту строку:
Ответ 15
Я изменил ответ с командным файлом vMax, чтобы он работал с голландским языком тоже.
У голландцев - постоянных, как мы, - есть несколько изменений в %date% , date/t и date , которые разбивают исходный пакетный файл.
Было бы неплохо, если бы некоторые люди могли проверить это и на других локалях Windows, а также сообщить результаты.
Если пакетный файл выходит из строя в вашем местоположении, пожалуйста, включите вывод этих двух операторов в командной строке:
echo:^|date
date/t
Это пример вывода, который вы должны получить из пакетного файла:
Вот пересмотренный код с комментариями о том, почему:
Ответ 16
И вот такой же пакетный файл для временной части.
Ответ 17
Одностороннее решение Мэтью Джонсона для получения даты и времени с одним слоем является красноречивым и полезным.
Однако для работы из пакетного файла требуется простая модификация:
Ответ 18
Функция, основанная на wmic :
Потенциал: Не зависит от региона. Даунсайд: Только системные администраторы могут запускать wmic.exe.
Это echos строка вроде этого:
Обратите внимание, что параметры функции out-Parameters - то есть вы должны указывать имена переменных вместо значений.
Все параметры являются необязательными, поэтому call:Now Y M является действительным вызовом, если вы хотите получать только год и месяц.
Ответ 19
Это то, что я использовал:
Ответ 20
У меня была аналогичная проблема. У меня есть автоматическая ежедневная загрузка с FTP-сервера зашифрованного файла. Я хотел расшифровать файл с помощью gpg, переименовать файл в текущую дату (формат YYYYMMDD) и удалить дешифрованный файл в папку для правильного отдела.
Я рассмотрел несколько предложений по переименованию файла в соответствии с датой, и мне не повезло, пока я не наткнулся на это простое решение.
Он работал отлично (т.е. имя файла появляется как "2011-06-14.txt" ).
Ответ 21
Просмотрите ZIP файл для "Date.exe" и переименуйте его "DateFormat.exe" (во избежание конфликтов).
Поместите его в папку Windows system32.
В нем много опций "date output".
Для справки используйте DateFormat.exe --h
Я не уверен, как вы поместите свой вывод в переменную среды. с помощью SET.
Ответ 22
Региональное независимое решение, генерирующее формат даты ISO:
Что еще можно оптимизировать: Другие процессы могут запутаться при использовании формата даты за короткий период, пока он изменен. Таким образом, синтаксический анализ вывода в соответствии с существующей строкой формата может быть "более безопасным", но будет более сложным.
Ответ 23
Ответ 24
Учитывая известную локальность, для справки в функциональной форме. Вызов ECHOTIMESTAMP показывает, как получить метку времени в переменной ( DTS в этом примере.)
И сохранен в файл, timestamp.bat, здесь вывод:
Ответ 25
В Windows 7 этот код работает для меня:
Ответ 26
Я предпочитаю делать это как можно короче, поэтому без месяца и года достаточно для ежедневного обновления
Когда дело доходит до версии приложения развернуть в свежем ежедневном обновлении со сборщиком
Благодаря этому будет проще автоматически обновлять все приложение.
Выходной файл будет готов для локального обновления, не затрагивая его имена файлов
Ответ 27
Я отмечаю, что o/p не просил регионарно-независимого решения. Мое решение для Великобритании.
Это самое простое решение - однострочное решение для использования в пакетном файле:
Ответ 28
Я знаю, что уже упоминалось множество способов. Но вот мой способ разбить его, чтобы понять, как это делается. Надеюсь, это полезно для тех, кто любит поэтапный метод.
Читайте также: