Пакетный файл: удаление папок после цикла for - PullRequest
0 голосов
/ 10 января 2020

Это то, что у меня есть сейчас. Если я запускаю этот скрипт, l oop никогда не заканчивается и не работает вечно. Я попытался удалить папку в папке kmz после перемещения файла в папку папки kmz; однако он не удалит папку внутри папки kmz. Я думаю, именно поэтому мой пакетный файл работает вечно. любая помощь ??

setlocal enableextensions enabledelayedexpansion


:loop
IF EXIST D:\kmz\*.* (
    FOR /f "delims=" %%a IN ('dir /b /s /a-d "D:kmz\*.*" ') do (
        FOR %%b IN ("%%~dpa.") do (
            REN "%%a" "%%~nb.*"
            move %%b\* D:\renamed
            del %%b 
            goto loop2
            )
        )
)

:loop2
IF EXIST D:\renamed\*.* (
    for /R D:\renamed %%G in (*.*) do (
        ogr2ogr -f "ESRI Shapefile" "D:\shapefile\%%~nG_boundary.shp" "%%G"
        move %%G D:\Photos\%%~nG
        goto transfering 
        )
)

:transfering 
IF EXIST D:\shapefile\*.shp (
    for /R D:\shapefile %%K in (*.*) do (
        set "filename=%%~nK"
        set "first5=!filename:~0,5!"
        move %%K D:\Photos\!first5!
        echo !date!-!time! %%K is created >> D:\Photos\!first5!\log.txt
        )
) 

goto loop

это моя вторая попытка:

setlocal enableextensions enabledelayedexpansion


:loop
FOR /f "delims=" %%a IN ('dir /b /s /a-d "D:kmz\*.*" ') do (
        FOR %%b IN ("%%~dpa.") do (
            IF EXIST %%a (
            REN "%%a" "%%~nb.*"
            move %%b\* D:\renamed
            rmdir %%~dpa
            goto loop2
            )
        )
)

:loop2
IF EXIST D:\renamed\*.* (
    for /R D:\renamed %%G in (*.*) do (
        ogr2ogr -f "ESRI Shapefile" "D:\shapefile\%%~nG_boundary.shp" "%%G"
        move %%G D:\Photos\%%~nG
        goto transfering 
        )
)

:transfering 
IF EXIST D:\shapefile\*.shp (
    for /R D:\shapefile %%K in (*.*) do (
        set "filename=%%~nK"
        set "first5=!filename:~0,5!"
        move %%K D:\Photos\!first5!
        echo !date!-!time! %%K is created >> D:\Photos\!first5!\log.txt
        )
) 

goto loop

Мне удалось удалить папку из D: \ kmz, но циклы не остановятся. Я этот вывод является причиной ...

C:\>FOR /F "delims=" %a IN ('dir /b /s /a-d "D:kmz\*.*" ') do (FOR %b IN ("%~dpa.") do (IF EXIST %a (
REN "%a" "%~nb.*"
 move %b\* D:\renamed
 rmdir %~dpa
 goto loop2
) ) )
File Not Found

1 Ответ

0 голосов
/ 10 января 2020

Чтобы остановить ваш l oop, попробуйте установить l oop в качестве переменной со значением один, и закодируйте его так, чтобы каждый раз, когда вы запускаете команду, он убирал единицу из l oop. Затем скажите, если переменная l oop равна 0, go другой части, в которой есть каталог вашего файла и команда удаления. Я надеюсь, что это работает.

...