Выполнение пакетного задания планировщика задач - PullRequest
0 голосов
/ 14 апреля 2019

У меня небольшая проблема с выполнением ниже пакетного задания, как показано во фрагменте кода.Пакетное задание выполняется очень хорошо при запуске в каталоге, в котором оно находится (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:\Temp\TestFile\Archive\%%~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:\Temp\TestFile"

    for /f "delims=" %%I in ('%MY_PATH% /b *.xlsx ^| findstr /vlg:"valid_naming_conventions.txt"') do move "%%I" "C:\Temp\TestFile\Archive\%%~nI__%Yr%-%Mon%-%Day%%%~xI"

Ваша помощь по этому вопросу будет принята с благодарностью.Ждем ваших предложений!


Вывод после запуска планировщика задач:

    C:\Windows\system32>rem @echo off 

    C:\Windows\system32>for /F "delims=" %a in ('wmic OS Get localdatetime | find "."') do set DateTime=%a 

    C:\Windows\system32>set DateTime=20190414170803.358000+120  


    C:\Windows\system32>set Yr=2019 

    C:\Windows\system32>set Mon=04 

    C:\Windows\system32>set Day=14 

    C:\Windows\system32>set Hr=17 

    C:\Windows\system32>set Min=08 

    C:\Windows\system32>set 
    MY_PATH="C:\Temp\TestFile" 

    C:\Windows\system32>for /F "delims=" %I in ('dir /B/A-D "C:\Temp\TestFile"\*.xlsx | findstr /vlg:"valid_naming_conventions.txt"') do move "%I" "C:\Temp\TestFile\Archive\%~nI__2019-04-14%~xI" 

    C:\Windows\system32>move "01-TestFile.xlsx" "C:\Temp\TestFile\Archive\01-TestFile__2019-04-14.xlsx" 

    C:\Windows\system32>move "02-TestFile.xlsx" "C:\Temp\TestFile\Archive\02-TestFile__2019-04-14.xlsx" 

    C:\Windows\system32>move "03-TestFile.xlsx" "C:\Temp\TestFile\Archive\03-TestFile__2019-04-14.xlsx"

    C:\Windows\system32>move "04-TestFile.xlsx" "C:\Temp\TestFile\Archive\04-TestFile__2019-04-14.xlsx" 

    C:\Windows\system32>move "05-TestFile.xlsx" "C:\Temp\TestFile\Archive\05-TestFile__2019-04-14.xlsx" 

    C:\Windows\system32>move "06-TestFile.xlsx" "C:\Temp\TestFile\Archive\06-TestFile__2019-04-14.xlsx" 

1 Ответ

1 голос
/ 14 апреля 2019

Вот пример, чтобы помочь вам:

@Echo Off
Set "My_Path=C:\Temp\TestFile"
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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...