Разработать пакетный файл для установки даты и времени параметры в командной строке

Обновлено: 06.07.2024

Для выполнения поставленной задачи можно перебрать в цикле все фай­лы с расширением 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 файлов:

  1. С помощью командной строки.
  2. С помощью программы «Блокнот».
  3. С помощью утилиты «Dr.Batcher».

Как сделать файл бат

Создание пакетного файла с помощью командной строки

Шаг 1. Для запуска командной строки в меню «Пуск» используйте диалог «Найти программы и файлы» Вы должны задать параметр поиска cmd и кликнуть левой кнопкой мыши по пиктограмме в разделе «Программы».

В параметре поиска вводим cmd и кликаем левой кнопкой мыши по пиктограмме в разделе «Программы»

В параметре поиска вводим cmd и кликаем левой кнопкой мыши по пиктограмме в разделе «Программы»

Шаг 2. Для хранения написанных батников рекомендуется использовать отдельную директорию, поэтому выберите место на Вашем жестком диске и создайте специальную папку, путем ввода команды «MD D:\Bat».

На заметку! Команда вводится без кавычек, пробел ставится только после использования MD. В описываемом случае папка с именем «Bat» будет создана на диске D. Командная строка нечувствительна к регистру, то есть результат выполнения «MD D:\Bat», «md D:\Bat» и «md d:\Bat» будет одинаков.

Создаем специальную папку, путем ввода команды «MD D:\Bat»

Создаем специальную папку, путем ввода команды «MD D:\Bat»

Шаг 3. Создайте собственно батник командой «@echo off > D:\Bat\probnik.bat».

Создаем батник командой «@echo off > D:\Bat\probnik.bat»

Шаг 4. Для изменения содержимого файла следует открыть место его хранения, вызвать контекстное меню и выбрать строку «Изменить».

Для изменения содержимого файла открываем место его хранения, вызываем контекстное меню и выбираем строку «Изменить»

Для изменения содержимого файла открываем место его хранения, вызываем контекстное меню и выбираем строку «Изменить»

Создание пакетного файла с помощью программы «Блокнот»

Шаг 1. Для запуска блокнота войдите в меню «Все программы», пункт «Стандартные» и щелкните по запускающей пиктограмме.

Запускаем программу «Блокнот»

Шаг 2. Укажите, какие команды должен выполнять bat файл.

Указываем, какие команды должен выполнять 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 дней.

Утилита «Dr.Batcher»

Шаг 1. Для создания файла воспользуйтесь меню «File», пункт «New…» или комбинацией клавиш «Ctrl+N».

Создаем файл

Шаг 2. В диалоговом окне отметьте «Empty Batch File» и нажмите «ОК».

Отмечаем «Empty Batch File» и нажимаем «ОК»

Шаг 3. Укажите, какие команды должен выполнять bat файл.

Указываем, какие команды должен выполнять 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

Я знаю, что уже упоминалось множество способов. Но вот мой способ разбить его, чтобы понять, как это делается. Надеюсь, это полезно для тех, кто любит поэтапный метод.

Читайте также: