Как зациклить команду внутри команды "for"? - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу, чтобы пакетный файл перемещал файлы% 3, сколько раз, как я могу это сделать?

% 1 - исходная папка
% 2 - папка назначения
% 3 -количество файлов
% 4 - это фильтр.
Это лучшее, что я могу придумать, но, похоже, он не работает согласованно.

@echo off
SETLOCAL EnableDelayedExpansion
set movedFiles=0
if [%4] EQU [] goto regular
:special
for /R  "%1" %%G in (%4) do (
    echo moving "%4"... "%%G"
    move /Y "%%G" "%2"
    set /a movedFiles+="1"
    if !movedFiles! EQU %3 GOTO endOfCopy
)
GOTO endOfCopy
:regular
for /R  "%1" %%G in (*) do (
    echo moving... "%%G"
    move /Y "%%G" "%2"
    set /a movedFiles+="1"
    if !movedFiles! EQU %3 GOTO endOfCopy
)
:endOfCopy
echo Done, %movedFiles% files Where copied successfully
ENDLOCAL

1 Ответ

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

Возможно, вы могли бы немного изменить свой код, (а пока посмотрите, решит ли он вашу проблему) :

@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
If "%~4"=="" (Call :StartMove %* "*") Else Call :StartMove %*
Pause & GoTo :EOF

:StartMove
Set "Moved=0" & For /R "%~1" %%A In ("%~4") Do (SetLocal EnableDelayedExpansion
    If !Moved! Equ %3 (EndLocal & Set "Moved=%Moved%" & GoTo EndMessage)
    Echo ...Moving "%%A" & Move /Y "%%A" "%~2" >Nul 2>&1 && Set /A Moved +=1)

:EndMessage
Echo Done, %Moved% files were copied successfully & EndLocal & Exit /B

Обратите внимание, что этот код похожваш , не проверяет входные параметры, (независимо от того, существуют ли они, имеют ли они правильный тип, в правильном ли порядке и т. д.) , я бы посоветовал вам реализовать что-то для этого, двигаясь вперед.Даже добавление чего-то простого, как показано ниже, будет началом:

If Not Exist "%~1\" Exit /B
If Not Exist "%~2\" Exit /B
If "%~3"=="" Exit /B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...