2017-01-06 269 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

這是Windows下的_batch_編程,而不是* nix系統上的_bash_編程。刪除標籤 – Inian

+0

感謝您的編輯。我的錯。 – Bulva

+0

1.用cd/D「%〜dp0Export」替換'cd Export';用'pushd'替換'cd Report _ %% a' Report _ %%〜a「';在'for/R %% f'循環的關閉')'後面添加'popd';刪除'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 

我已經在Export目錄內創建了新的目錄,只是爲了保持一切。在兩個位置將"new_reports\new_report_!input:*_=!"更改爲"%~dp0new_reports\new_report_!input:*_=!"以更改爲您的首選結構。

+0

非常感謝。得到它了 – Bulva

相關問題