Папка, используемая для другого процесса в пакетном скрипте - PullRequest
0 голосов
/ 25 июня 2018

У меня проблема со сценарием резервного копирования, который я написал.Резервное копирование довольно просто.Он скопирует каталог в целевой путь, а затем заархивирует его.У меня есть несколько предложений If, например, для удаления самой старой резервной копии, если из предыдущих резервных копий есть 5 или более .zip.

Проблема, с которой я сталкиваюсь, заключается в следующем: после выполнения команды XCOPYзатем я запускаю сценарий PowerShell из пакета для архивации резервной копии, но получаю следующую ошибку:

enter image description here

Это происходит из-за того, что файл .batБег.Я проверил.

Ниже приведен код сценария пакетной обработки и оболочки Power:

BATCH:

echo "========================================="
echo "=====| Backuping DCT Light's Files |====="
echo "========================================="

SET dct-light_src=\\w102xnk172\c$\inetpub\wwwroot\DCT_NEW

For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set dct_light_startting_date=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set dct_light_startting_time=%%a%%b)

SET starttime=%dct_light_startting_date%

CD C:\Users\william_silva4\Desktop\tools_backup\dct_light\
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A "N=0"
FOR /F %%f IN ('DIR /B /A:-D "*"') DO (SET /A "N=!N!+1")

IF %n% == 5 (

powershell.exe -noexit -file "C:\Users\william_silva4\Desktop\remove_oldest.ps1"

) ELSE (
    IF EXIST C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%starttime%\ ( 
        MD C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%starttime%\dctlight_backup
        SET dct-light_dtn=C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%starttime%\dctlight_backup
        echo A folder for this backup already exists. Beggining overwrite...
    ) ELSE ( 
        MD C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%starttime%\dctlight_backup
        SET dct-light_dtn=C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%starttime%\dctlight_backup\
    )   
)
CD C:\Users\william_silva4\Desktop\backup_completo
XCOPY %dct-light_src% %dct-light_dtn% /w /e /y /EXCLUDE:C:\Users\william_silva4\Desktop\backup_completo\exclusion.txt

For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set dct_light_finished_date=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set dct_light_finished_time=%%a%%b)

SET startdate=%dct_light_finished_date%
SET starttime=%dct_light_startting_date%_%dct_light_startting_time%
SET finishedtime=%dct_light_finished_date%_%dct_light_finished_time%

CD C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%startdate%\

echo.LOG of %starttime%'s Backup>LOG_%startdate%.txt
echo.Start time: %starttime%>>LOG_%startdate%.txt
echo.Finished time: %finishedtime%>>LOG_%startdate%.txt

CD C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%startdate%\dctlight_backup\

SETLOCAL ENABLEDELAYEDEXPANSION
SET /A "N=0"
FOR /F %%f IN ('DIR /S /B /A:-D "*"') DO (SET /A "N=!N!+1")

CD ../
echo.Files copied: %N%>>LOG_%startdate%.txt

powershell.exe -noexit -file "C:\Users\william_silva4\Desktop\zip_backups.ps1"

pause>nul

POWERОБОЛОЧКА:

#DCT Light's zipping
Start-Sleep -s 15
$source = "C:\Users\william_silva4\Desktop\tools_backup\dct_light"
$date = Get-Date -UFormat "%Y-%m-%d"
$destination = "C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_$date.zip"

If(Test-path $destination) {Remove-item $destination}
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($source, $destination)

Remove-Item $source\* -Recurse -Exclude *.zip

Что я пытался решить проблему:

  1. Создайте Master.ps1 со списком сценариев для запуска, где первый, очевидно, резервный пакетный файл, а затем zips-файл ps1.
  2. Вызовите zipping ps1-файл из резервного пакетного файла в другом окне, а затем уничтожьте пакет.В этом случае первая строка скрипта была:

    Start-Sleep -s 15

Так что я был уверен, что пакет был убит до того, как я действительно начал архивировать.

Ничего из вышеперечисленного не сработало.Любая помощь?Если ничего не работает, я просто запланирую их как отдельные задачи в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...