任务计划程序批处理作业执行



我在下面的批处理作业执行中遇到了一个小问题,如代码片段所示。批处理作业在它所在的目录 (C:\Temp\TestFile( 中触发时执行得很好。但是,我注意到当我计划作业通过任务计划程序执行时没有任何反应。任务计划程序使用带有"无论用户是否登录都运行"选项的服务帐户。

    @echo off
    for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set DateTime=%%a
    set Yr=%DateTime:~0,4%
    set Mon=%DateTime:~4,2%
    set Day=%DateTime:~6,2%
    set Hr=%DateTime:~8,2%
    set Min=%DateTime:~10,2%
    for /f "delims=" %%I in ('dir /b *.xlsx ^| findstr /vlg:"valid_naming_conventions.txt"') do move "%%I" "C:TempTestFileArchive%%~nI__%Yr%-%Mon%-%Day%%%~xI"

我认为服务帐户无法识别目录。但是,在我对以下内容进行更改后,仍然没有任何反应,不符合文本文件中指定的有效命名约定的文件仍保留在同一目录中,并且不会移动到存档文件夹:

    @echo off
    for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set DateTime=%%a
    set Yr=%DateTime:~0,4%
    set Mon=%DateTime:~4,2%
    set Day=%DateTime:~6,2%
    set Hr=%DateTime:~8,2%
    set Min=%DateTime:~10,2%
    set MY_PATH="C:TempTestFile"
    for /f "delims=" %%I in ('%MY_PATH% /b *.xlsx ^| findstr /vlg:"valid_naming_conventions.txt"') do move "%%I" "C:TempTestFileArchive%%~nI__%Yr%-%Mon%-%Day%%%~xI"

我们将非常感谢您对此的帮助。期待您的建议!


运行任务计划程序后的输出:

    C:Windowssystem32>rem @echo off 
    C:Windowssystem32>for /F "delims=" %a in ('wmic OS Get localdatetime | find "."') do set DateTime=%a 
    C:Windowssystem32>set DateTime=20190414170803.358000+120  

    C:Windowssystem32>set Yr=2019 
    C:Windowssystem32>set Mon=04 
    C:Windowssystem32>set Day=14 
    C:Windowssystem32>set Hr=17 
    C:Windowssystem32>set Min=08 
    C:Windowssystem32>set 
    MY_PATH="C:TempTestFile" 
    C:Windowssystem32>for /F "delims=" %I in ('dir /B/A-D "C:TempTestFile"*.xlsx | findstr /vlg:"valid_naming_conventions.txt"') do move "%I" "C:TempTestFileArchive%~nI__2019-04-14%~xI" 
    C:Windowssystem32>move "01-TestFile.xlsx" "C:TempTestFileArchive1-TestFile__2019-04-14.xlsx" 
    C:Windowssystem32>move "02-TestFile.xlsx" "C:TempTestFileArchive2-TestFile__2019-04-14.xlsx" 
    C:Windowssystem32>move "03-TestFile.xlsx" "C:TempTestFileArchive3-TestFile__2019-04-14.xlsx"
    C:Windowssystem32>move "04-TestFile.xlsx" "C:TempTestFileArchive4-TestFile__2019-04-14.xlsx" 
    C:Windowssystem32>move "05-TestFile.xlsx" "C:TempTestFileArchive5-TestFile__2019-04-14.xlsx" 
    C:Windowssystem32>move "06-TestFile.xlsx" "C:TempTestFileArchive6-TestFile__2019-04-14.xlsx" 

这里有一个示例可以帮助您:

@Echo Off
Set "My_Path=C:TempTestFile"
If Not Exist "%My_Path%*.xlsx" Exit /B
CD /D "%My_Path%"
Set "ds="
For /F "Tokens=1-3Delims=/ " %%A In ('RoboCopy /NJH /L "|" Null'
)Do If Not Defined ds Set "ds=%%A-%%B-%%C"
For /F "Delims=" %%A In (
    'Dir /B/A-D-L *.xlsx^|FindStr /VLG:"valid_naming_conventions.txt"'
)Do (If Not Exist "Archive" MD "Archive"
    Move /Y "%%A" "Archive%%~nA__%ds%%%~xA")

您可能希望考虑是否打算在与批处理文件本身相同的目录中运行任务。在这种情况下,您将没有硬编码路径,因为您可以扩展批处理文件本身的特殊元变量,%0

@Echo Off
If Exist "%~dp0*.xlsx" (CD /D "%~dp0")Else Exit /B
Set "ds="
For /F "Tokens=1-3Delims=/ " %%A In ('RoboCopy /NJH /L "|" Null'
)Do If Not Defined ds Set "ds=%%A-%%B-%%C"
For /F "Delims=" %%A In (
    'Dir /B/A-D-L *.xlsx^|FindStr /VLG:"valid_naming_conventions.txt"'
)Do (If Not Exist "Archive" MD "Archive"
    Move /Y "%%A" "Archive%%~nA__%ds%%%~xA")

最新更新