Пакетный скрипт случайно не копирует файлы из папки Unix Share в Windows - PullRequest
0 голосов
/ 30 января 2019

У меня есть пакетный скрипт, который читает из общего каталога Unix ( X ) каждые 3 секунды и копирует все файлы в локальный каталог на ПК с Windows 7.

Как только файлы успешноСкопированный сценарий удаляет содержимое общего каталога Unix, поэтому те же файлы не копируются снова.

Проблема в том, что сценарий иногда не может скопировать файл.Это выглядит довольно случайно.

Сценарий должен выдавать любые обнаруженные ошибки, но я не вижу ошибок в выходном журнале при возникновении этих событий.

Итак, мои вопросы: 1. Естьтам проблема с моим сценарием относительно перехвата ошибок.Выходные данные журнала только когда-либо основаны на errorLevel, равном 0 (см. Скрипт), даже если в каталоге Unix нет файлов, где вывод errorLevel 1 в журнал должен выполняться в соответствии с кодом.

Существует ли причина, по которой файлы не будут скопированы из общего каталога Unix в локальный каталог, что выглядит случайным образом?

Любые входные данные приветствуются.

echo off

:START




rem /Y removes prompt fro do you want to overwrite?

xcopy /Y X:\ C:\Users\histology\Desktop\PrintMateCopy

rem for debugging missed cassettes, copy to a new directory and don't delete
xcopy /Y X:\ C:\Users\histology\Desktop\PrintmateCopy2

echo %errorLevel%


if %errorLevel% equ 5 (

echo Disk write error occurred.: Error %errorLevel% >> PrintMateLog.log
)

if %errorLevel% equ 4 (
echo %date% : %time% : Error: %errorLevel% : Initialization error occurred. There is not
      enough memory or disk space, or you entered
      an invalid drive name or invalid syntax on
      the command line. >> C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log

)

if %errorLevel% equ 2 (
echo Error: %errorLevel% user terminated the copy with Crtl C >> C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log
)

if %errorLevel% equ 1 (

echo Error: %errorLevel% No files found >> C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log
)

if %errorLevel% equ 0 (
echo %date% : %time% : Files were copied without error. Deleting Unix share files from dir..Errorlevel  : %errorLevel% >> C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log

rem /F Force del read only files. /Q force del without prompt

del /F /Q X:\

if %errorLevel% equ 1 (
echo No Unix share dir files found. error %errorLevel%  C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log
)

if %errorLevel% equ 0 (
echo Files deleted.>> C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log
)


)

ДОПОЛНЕНИЕ: Скрипт для подсчета количества файлов в каталоге до того, как была сделана копия.

Проблема в том, что скрипт останавливается, когда каталог пуст, есть ли способ проверить, пуст ли каталог докод выполнен?

SET /A "N=0"

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

ECHO N is %N%

1 Ответ

0 голосов
/ 30 января 2019

Возможно, попробуйте эту версию.Нам не нужно заключать в скобки одну команду, если, наконец, в операторах printmate.log было две разные версии, одна с путем и одна без, давайте попробуем придерживаться стандарта.Пожалуйста, скопируйте код точно так же, как:

echo off

rem /Y removes prompt fro do you want to overwrite?

xcopy /Y X:\ C:\Users\histology\Desktop\PrintMateCopy

rem for debugging missed cassettes, copy to a new directory and don't delete
xcopy /Y X:\ C:\Users\histology\Desktop\PrintmateCopy2

echo %errorLevel%

if %errorLevel% equ 5 echo Disk write error occurred.: Error %errorLevel%>>.>>"C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log"

if %errorLevel% equ 4 echo %date% : %time% : Error: %errorLevel% : Initialization error occurred. There is not enough memory or disk space, or you entered an invalid drive name or invalid syntax on the command line.>>"C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log"

if %errorLevel% equ 2 echo Error: %errorLevel% user terminated the copy with Crtl C>>"C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log"

if %errorLevel% equ 1 echo Error: %errorLevel% No files found>>"C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log"

if %errorLevel% equ 0 goto :delfiles
Goto :EOF

:delfiles
echo %date% : %time% : Files were copied without error. Deleting Unix share files from dir..Errorlevel  : %errorLevel%>>"C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log"

del /F /Q X:\
If %errorlevel% equ 0 (
     echo files deleted successfully>>"C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log"
) else (
     echo error deleting files>>"C:\Users\histology\Desktop\PrintmateCopy2\PrintMateLog.log"
)

Редактировать

В соответствии с вашим комментарием, возможно, мы можем просто проверить количество файлов в x:\ плюс файлподсчитайте в c:\, затем переместите все файлы и проверьте, является ли количество файлов в c: \ одинаковым после перемещения, если не повторить попытку.

@echo off
:start
set "home_path=C:\Users\histology\Desktop\PrintMateCopy"
for /f %%i in ('dir /a-d-s-h /b X:\ ^| find /v /c ""') do echo set xcnt=%%i
for /f %%i in ('dir /a-d-s-h /b "%home_path%" ^| find /v /c ""') do echo set ccnt=%%i
set /a compcount=xcnt+ccnt
move /Y X:\* "%home_path%
for /f %%i in ('dir /a-d-s-h /b %home_path% ^| find /v /c ""') do echo set mvcnt=%%i
if "%mvcnt%"=="%compcont%" (
  echo All files moved
) else (
  echo not all files moved %mvcnt% files remains
    goto :start
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...