2017-01-06 3 views
0

Мне нужно переместить, а затем удалить каталоги, где файл находился с диска. Структура выглядит следующим образом:Команда rmdir в файле пакетного скрипта не работает должным образом

./Export 
    /Report_1 
    /12345 
     /something.pdf 
    /Report_2 
    ... 

Мой код выглядит следующим образом:

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 

cd Export 
for /D %%I in (%~dp0Export\*) do (
    set "input=%%~nI" 
    for /f "tokens=2 delims=_" %%a in ("!input!") do (
     md %~dp0new_reports\new_report_%%a 
     cd Report_%%a 
     for /R %%f in (*.pdf) do (
      for %%S in (%%f) do (
       if %%~zS NEQ "0" (
        move %%f %~dp0new_reports\new_report_%%a 
        cd .. 
        set "id=%%a" 
        echo !id! 
        rmdir /S /Q "%~dp0Export\Report_!id!\" 
       ) 
      ) 
     ) 
    ) 
) 
@echo Finished .... 

Но RmDir удаляет только вложенную папку с ID (/12345), но папка Report_1 все еще там, но пусто. Я попробовал echo «% ~ dp0Export \ Report_! Id! \", и все выглядит нормально.

Так в конце структуры сценария выглядит следующим образом:

./Export 
     /Report_1 
     /Report_2 
     ... 

и мне нужно удалить папки Report_1 и так далее, а также.

Если я копирую команду для консоли, она работает, но в пакетном скрипте она не работает, как мне нужно.

+0

Это программирование _batch_ под Windows, а не программирование _bash_ на системах * nix. Удаление тега – Inian

+0

Спасибо за редактирование. Виноват. – Bulva

+0

1. Замените 'cd Export' на' cd/D '% ~ dp0Export "'; замените 'cd Report _ %% a' на' pushd 'Report _ %% ~ a "'; добавить 'popd' после закрытия') 'цикла' for/R %% f'; удалите 'cd ..'. 2. Измените внешний цикл: 'for/D %% I in ("% ~ dp0Export \ Report_ * ") do ('. 3. Нет необходимости в цикле 'for %% S', просто получите доступ к' %% ~ zf' вместо 4. Установить переменную 'input' в' %% ~ fI' 5. Не определять переменную 'id', просто обращаться к' %% ~ a'. 6. Использовать кавычки: 'move '%% ~ f ""% ~ dp0new_reports \ new_report _ %% ~ a "'. 7. Измените командную строку 'rmdir':' rmdir/S/Q '% ~ dp0Export \ %% ~ I ​​"'. – aschipfl

ответ

0

Будет что-то вроде этого подходит для вашей цели?

@Echo Off 
SetLocal EnableDelayedExpansion 
PushD "%~dp0Export" 2>Nul||Exit/B 
For /D %%I in (*) Do (Set "input=%%~nxI" 
    MD "new_reports\new_report_!input:*_=!" 
    For /F "Delims=" %%f In ('Dir/B/S/A-D "%%~nxI\*.pdf"') Do If %%~zf Neq 0 (
     Move "%%f" "new_reports\new_report_!input:*_=!" && RD/S/Q "%%~nxI")) 
Echo(Finished .... 
Timeout -1 

Я создал новые каталоги внутри каталога экспорта, чтобы сохранить все вместе. Измените "new_reports\new_report_!input:*_=!" на "%~dp0new_reports\new_report_!input:*_=!" в обоих местах, чтобы перейти к вашей предпочитаемой структуре.

+0

Большое спасибо. понял – Bulva