使用WMIC的批处理文件无法与TaskScheduler正常配合使用(但可以从命令行正常运行!)

问题描述 投票:1回答:2

我决定写一个小的批处理文件来制作文件夹及其内容的每日副本。我使用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.
batch-file windows-10 xcopy taskscheduler wmic
2个回答
0
投票

我建议您使用一种比更快速的方法来确定日期。

以下示例使用

@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

0
投票

如果要从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
© www.soinside.com 2019 - 2024. All rights reserved.