У меня есть папка Foo которую я хочу сделать резервную копию на Foo.2018.07.12.7z

и до сих пор я попробовал эту команду:

C:\"Program Files"\7-Zip\7z a "Foo%DATE%".7z Foo

но проблема в том, что мой формат даты имеет косую черту, поэтому он создает вложенные папки, такие как: Foo12\7\2018.7z

2 ответа2

1

Вот пакетное решение, которое я бы использовал для выполнения этой операции, как вы указали, но с немного другим синтаксисом и немного более явным. Я бы также использовал подстроки даты и переменных, чтобы установить дату в правильном формате, как вы хотите, но я бы назвал переменную даты %Dt% а не %DATE% .


Пакетный скрипт

@ECHO OFF

SET Dt=%date:~10%.%date:~4,2%.%date:~7,2%
SET SrcFolder=C:\Test\Foo
SET DestPath=C:\Destination\Folder

"C:\Program Files\7-Zip\7z" a "%DestPath%\Test.%Dt%.7z" "%SrcFolder%"

Дополнительные ресурсы

1

Я предпочитаю получать дату / время в независимом формате локали / пользовательских настроек.

Вот два разных способа добиться этого:

:: Q:\Test\2018\07\12\SU_1338640.cmd
@Echo off

:: use wmic to get date in a locale/user settings independent format
for /f "tokens=1-3 delims=.+-" %%A in (
  'wmic os get LocalDateTime^|findstr ^^[0-9]'
) do Set _DT=%%A
Set "Archive=Foo.%_DT:~0,4%.%_DT:~4,2%.%_DT:~6,2%.7z"
Echo Archive=%Archive%

:: use powershell to get date in a locale/user settings independent format
for /f %%A in (
  'Powershell -Nop -C "Get-Date -f yyyy.MM.dd" '
) do Set "_DT=%%A"
Set "Archive=Foo.%_DT%.7z"
Echo Archive=%Archive%

Образец вывода:

> Q:\Test\2018\07\12\SU_1338640.cmd
Archive=Foo.2018.07.12.7z
Archive=Foo.2018.07.12.7z

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .