user4691433
user4691433

Reputation:

For Loop Ends Batch File Execution

My batch file is silently ending execution on the first loop (for /d "delims= eol=|" %%d in (*.*) do () and I can't tell why.

I never see !parent!!folder! echoed and it doesn't pause at the end. What am I doing wrong?


@Echo off
setlocal enabledelayedexpansion

pushd "%~dp0"

set "parent=%~dp0"
echo !parent!
set "destination=\\(test destination folder)\"

rem SET "destination=\\(prod destination folder)\"


set "FileCount=0"


for /d "delims= eol=|" %%d in (*.*) do (
    set "folder=%%d"
    echo !parent!!folder!
    pause
    for %%f in ("!parent!!folder!\(file identifying-pattern)*.DAT") do (
        echo "File Type 1"
        pause
        if !FileCount! lss 200 ( 
            set /a !FileCount!+=1
            ECHO !FileCount!
            ECHO !parent!!folder!%%f
            ECHO !destination!%%f
            MOVE "%%f" "!destination!"
        )
    (
    for %%f in ("!parent!!folder!\(file identifying-pattern)*.DAT") do (
        echo "File Type 2"
        pause
        if !FileCount! lss 200 ( 
            set /a !FileCount!+=1
            ECHO !FileCount!
            ECHO !parent!!folder!%%f
            ECHO !destination!%%f
            MOVE "%%f" "!destination!"
        )
    )
)


for /d %%d in (*.*) do (
set "folder=%%d"
if not %%d==Archive (
if not %%d==Hold (

dir /b "!folder!"|find /v "">nul && ECHO "!folder! NOT EMPTY"||rmdir "!parent!!folder!"

)
)
)


pause

popd

Upvotes: 0

Views: 52

Answers (1)

Compo
Compo

Reputation: 38719

I've took a guess at what you were doing, trying not to change the structure too much!

You'll need to add your destinations on lines 4 and 5 and your file patterns to lines 8 and 9 as necessary. (Please make sure you do not end your destination paths with back slashes):

@Echo Off
CD /D "%~dp0" 2>Nul || Exit /B

Set "Destination=\\(test destination folder)"
Rem Set "Destination=\\(prod destination folder)"
If Not Exist "%destination%\" Exit /B

Set "Pattern1=(file identifying-pattern)"
Set "Pattern2=(file identifying-pattern)"

Set /A Type1Count=Type2Count=0
SetLocal EnableDelayedExpansion
For /D %%A In (*) Do (
    For %%B In ("%%A\%Pattern1%*.dat") Do (
        Echo "File Type 1"
        Set /A Type1Count +=1
        If !Type1Count! Lss 200 (
            Echo !Type1Count!. "%CD%\%%A\%%B" --^> "%Destination%\%%B"
            If Not Exist "%Destination%\%%B\" MD "%Destination%\%%B"
            Move /Y "%%B" "%Destination%\%%B">Nul
        )
    )
    For %%C In ("%%A\%Pattern2%*.dat") Do (
        Echo "File Type 2"
        Set /A Type2Count +=1
        If !Type2Count! Lss 200 (
            Echo !Type2Count!. "%CD%\%%B\%%C" --^> "%Destination%\%%C"
            If Not Exist "%Destination%\%%C\" MD "%Destination%\%%C"
            Move /Y "%%C" "%Destination%\%%C">Nul
        )
    )
    If /I Not "%%A"=="Archive" (
        If /I Not "%%A"=="Hold" (
            Set "file="
            For %%D In (*) Do Set "file=1"
            If Defined file (Echo %%A NOT EMPTY) Else RD "%%A" 2>Nul
        )
    )
)

Pause

If you're happy with it in your test you can Remark line 4 and unRemark line 5.

Upvotes: 0

Related Questions