Пакетные файлы Windows-10 основаны на команде DATE, как использовать в более низких версиях Windows

2086
Dominique

Я работаю на двух (виртуальных) машинах:

  • Сначала это машина Windows 10
  • Во-вторых, машина Windows 7

На обоих форматах короткой даты одинаковы: dd.MM.yyyy
на обоих я запускаю один и тот же пакетный файл, основанный на DATEкоманде.

У меня есть различия в результатах, связанных с результатами DATEкоманды:

  • В Windows 10: The current date is: st 22.03.2017
  • В Windows 7: The current date is: 22.03.2017

Как видите, разница связана с наличием имени сегодня ( stэто сокращение от чешского слова для Wednesday).

Система Windows 10 является главной, поэтому мой вопрос: как я могу изменить систему Windows-7, чтобы включить первые две буквы названия дня?

В качестве тестов я уже пробовал следующее для короткого формата даты:

dd dd.MM.yyyy // this is better, the length of the format is good, but it does not start with the initials of the day's name. dddd dd.MM.yyyy // this starts with the day's name, but completely,  and I only want the first two letters. 

Тем временем я еще раз рассмотрел проблему: формат даты, кажется, используется в двух местах:

  1. При работе с командой DATEкомандной строки (там мне нужен формат
    xx dd.MM.yyyy(какой xxбы он ни был) для дальнейшей обработки
  2. Во время следующего echo: for /r %DIRECTORY% %I in ("*.*") do echo %~tfI Идея состоит в том, чтобы показать метку времени и имя файла, что-то вроде:
    22.03.2016 13:50 <filename>(без xx)
2
В Windows 7 невозможно иметь 2-х символьные дни недели. DavidPostill 7 лет назад 0
Я вижу два варианта: (1) использовать формат длинных дней, но изменить названия дней на их короткие эквиваленты, хотя это означает, что вы никогда не увидите истинные имена длинных дней; (2) написать свою собственную программу для отчета о дате: это будет всего несколько строк `C` и будет полностью независимым от региональных настроек, или это может быть сделано в несколько сложном пакетном файле, который манипулирует содержимым `% DATE% переменная. AFH 7 лет назад 0
Используйте `wmic` или PowerShell для независимой работы с датой в региональных, региональных и языковых настройках. См. Мой ответ [Пакетный скрипт (cmd), приводящий к формату DD-MM-YYYY \ _weekday] (// superuser.com/a/1086182) для получения некоторых советов. DavidPostill 7 лет назад 0
@AFH: к сожалению, даже написание собственной маленькой программы не решает проблему: мне нужно было бы назвать эту программу «date.exe», но когда я запускаю «Date», даже в каталоге, где я только что скомпилировал «date». exe ", он все еще продолжает принимать команду командной строки` DATE`. Dominique 7 лет назад 0
Почему вам нужно дать ему то же имя? Почему бы не назвать это `CzDate.exe` или что-то подобное? В `cmd` команда` date` является встроенной в оболочку, поэтому всегда будет выбираться вместо внешнего `date.exe`, если только вы не добавите путь к вызову, например`. \ Date`; в качестве альтернативы, для использования в командной строке (не в пакетном файле) вы можете установить псевдоним, например, `doskey date =. \ date.exe`. AFH 7 лет назад 0

2 ответа на вопрос

1
Overmind

В Windows 7 вы должны использовать, dddчтобы иметь аналогичный формат, который составляет 3 символа, а не 2.

Таким образом, вы можете использовать DDD DDMM.YYYY . Это поддерживаемый формат.

Чтобы получить 2 символа, можно удалить один с помощью командного файла.

Пожалуйста, внимательно прочитайте вопрос. Ваш ответ ** не ** отвечает на оригинальный вопрос. Он хочет добавить к машине Windows 7, а не удалить из машины Windows 10. DavidPostill 7 лет назад 0
Похоже, требование это наоборот. Я обновил. Overmind 7 лет назад 0
Может быть, это может быть полезно в конце концов: у вас есть идея, как кому-то удалось сделать это на Windows 10? Краткий формат даты: `dd.MM.yyyy` Результат командной строки DATE:` st 22.03.2017` => Как им удалось получить этот результат, начиная с `st`? Dominique 7 лет назад 0
У вас не будет st, если вы только измените его на dd.MM.yyyy. Для повторного добавления st, сброс должен быть в формате dd dd.MM.yyyy. Overmind 7 лет назад 0
0
Dominique

Какой беспорядок, но я думаю, что нашел решение этой проблемы:

Суть в следующем: в Windows 10 даже при простом формате даты (например dd.MM.yyyy) date /Tкомандная строка добавляет первые символы дня, поэтому мы получаем следующее:

date /T st 22.03.2017 

И мои коллеги построили свои пакетные файлы вокруг присутствия этих "st" персонажей. Запуск этих пакетных файлов в более низких версиях Windows приводит к упомянутым проблемам.

В начале пакетных файлов я добавил строку:

DATE=xx %DATE% 

(Признаюсь, очень по-детски)
Это заставляет работать пакетные файлы на моем компьютере с Windows-7.
Чтобы заставить его работать в обеих системах, мне просто нужно добавить проверку на платформе, что-то вроде:

set WINDOWS_10=%ver | findstr /C:"Version 10"% if "WINDOWS_10"=="" ( set DATE=xx %DATE%) 

Я еще не проверял это на ПК с Windows-10, но я верю, что это поможет.

Я больше не могу проверять Win7, так как я обновил все свои системы W7, но на Win10 ваша команда `set Windows_10 =` не работает: вам нужно `ver | findstr / C: «Версия 10», за которой следует «if errorlevel 1 set DATE = xx% DATE%`. Это повлияет на то, что возвращает `% DATE%`, но сама команда `date` останется неизменной. Вы также должны `установить DATE =` сначала, чтобы удалить локальную переменную, и снова перед выходом, чтобы не влиять на другие командные файлы, вызываемые из того же экземпляра `cmd`. AFH 7 лет назад 1
Он не добавляет их, если вы изменили свои настройки. Overmind 7 лет назад 0
@AFH: спасибо за предупреждение, но пакетные файлы должны использоваться из планировщика задач, поэтому никогда не будет других программ, запускаемых из того же экземпляра `cmd`. Dominique 7 лет назад 0