Пакетный файл с использованием WMIC не работает правильно с TaskScheduler (но работает нормально из командной строки!) - PullRequest
1 голос
/ 28 октября 2019

Я решил написать небольшой пакетный файл, чтобы делать ежедневные копии папки и ее содержимого. Я использовал WMIC для правильного форматирования даты, чтобы автоматически называть папки. Хотя он отлично работает в командной строке, похоже, ему не нравится, когда он выполняется TaskScheduler - он делает копию папки, но не получает никакой даты и сохраняет файлы в папку с именем -~-2-~-2. Кажется, что в целом пропускается первая часть кода и происходит переход непосредственно к части Pad digits, откуда она получает бит ~-2. Любые предложения будут приветствоваться!

Вот мой пакетный файл:

@Echo off
:: Check WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error

:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Month^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
)
:s_done

:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%

:: Display the date/time in ISO 8601 format:
Set _date=%_yyyy%-%_mm%-%_dd%
Echo %_date%

:: Xcopy the files!

xcopy /s /i "C:\Users\Alcides\Documents\CQC_APS_TESE_DOUTORAMENTO_LaTeX" "I:\Tese-Backup\"%_date%\

GOTO:EOF

:s_error
Echo GetDate.cmd
Echo Displays date and time independent of OS Locale, Language or date format.
Echo:
Echo Returns 6 environment variables containing isodate,Year,Month,Day,hour and minute.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Если вы хотите получить ISODate из WMIC, вы должны попробовать что-то вроде этого кода:

@echo off
Title GET ISODATE FROM WMIC
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
set today=%MyDate:~0,4%-%MyDate:~4,2%-%MyDate:~6,2%
echo Today : %today%
set "year=%MyDate:~2,2%"
set "month=%MyDate:~4,2%"
set "day=%MyDate:~6,2%"
echo %day%%month%%year%
pause
0 голосов
/ 28 октября 2019

Я бы посоветовал вам использовать более быстрый метод определения даты, чем .

В следующем примере используется :

@Set "_date="
@For /F "Tokens=1-3Delims=/ " %%A In ('^""%__AppDir__%RoboCopy.exe" /NJH /L "\|" Null^"')Do @If Not Defined _date Set "_date=%%A-%%B-%%C"
@"%__AppDir__%XCopy.exe" "C:\Users\Alcides\Documents\CQC_APS_TESE_DOUTORAMENTO_LaTeX" "I:\Tese-Backup\%_date%\" /S
...