Пакетный скрипт (рекурсивное перемещение файлов) - останавливается после перемещения - PullRequest
0 голосов
/ 24 января 2019

Так что я совсем не разбираюсь в написании сценариев, поэтому просто пытаюсь понять это по ходу дела, и я немного застрял. Таким образом, с помощью следующего скрипта я пытаюсь в основном искать набор папок, и в каждой папке есть два файла. Они остаются в паре друг с другом (для вызова внешнего приложения, чтобы запустить их вместе). Поэтому я перевожу их, затем пытаюсь вызвать внешнее приложение и тому подобное. Я также должен был удалить два файла после запуска другого приложения ... Проблема в том, что после 2-го перемещения файла я не могу поместить еще какой-либо код, мудрый после него для его выполнения. Например, есть два тестовых файла, с которыми я пытался это сделать. Если я добавляю команду для запуска внешнего приложения ПОСЛЕ того, как выполняется перемещение, это то, что я пытаюсь сделать ... он перемещает файлы, но в основном перемещает первый файл дважды и использует его как оба файла, если это имеет смысл , Итак, есть файл A и файл b. Я получаю два файла A, только один из них называется файл b. Если я прокомментирую какой-либо код после перемещения, он отлично работает.

@ECHO ON
SET Loc1Dir=C:\Users\*****\Desktop\temp
SET Loc2Dir=S:\shared\*****\*****\Input\Run\Working_Folder
CD /D  "%Loc1Dir%"
FOR /R %%F IN ("*.STMT*") DO CALL :CopyFile %%~F
FOR /R %%I IN ("*.CARD*") DO CALL :CopyFile2 %%~I

:CopyFile
SET copyfname=%~1
SET fname=driver
ECHO F | XCOPY  /Y /F "%copyfname%" "%Loc2Dir%\%fname%"
:::CALL :CopyFile2
:::GOTO :EOF

:CopyFile2
SET copyfname2=%~1
SET fname2=card
ECHO F | XCOPY /Y /F "%copyfname2%" "%Loc2Dir%\%fname2%"

Я знаю, что некоторые закомментированы, но это просто от того, что что-то движется и пытается заставить его работать правильно. По существу, после того, как 2 шага будут выполнены, я вызову внешнее приложение, затем оно запустится, а затем вернется, и я заставлю этот скрипт удалить файлы, а затем перейти к следующей папке / набору файлов.

1 Ответ

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

Это может быть проблема с тем, как вы возвращаетесь после ваших заявлений CALL.Использование EXIT / R или GOTO: EOF в конце подпрограммы вернет вас туда, где был сделан CALL.

Я бы попробовал что-то вроде этого:

EDIT: исправлено EXIT / Rбыть EXIT / B

EDIT2: добавлен EXE во второй SUB

```
@ECHO ON
SET Loc1Dir=C:\Users\*****\Desktop\temp
SET Loc2Dir=S:\shared\*****\*****\Input\Run\Working_Folder
CD /D  "%Loc1Dir%"
FOR /R %%F IN ("*.STMT*") DO CALL :CopyFile %%~F
FOR /R %%I IN ("*.CARD*") DO CALL :CopyFile2 %%~I

:CopyFile
SET copyfname=%~1
SET fname=driver
ECHO F | XCOPY  /Y /F "%copyfname%" "%Loc2Dir%\%fname%"
foo.exe -argument
EXIT /B

:CopyFile2
SET copyfname2=%~1
SET fname2=card
ECHO F | XCOPY /Y /F "%copyfname2%" "%Loc2Dir%\%fname2%"
EXIT /B

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