2017-01-06 3 views
0

je dois déplacer et supprimer des répertoires où le fichier a été localisé à partir du disque. La structure ressemble à ce que:Commande rmdir dans le fichier script batch ne fonctionne pas correctement

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

Mon code ressemble à ceci:

@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 .... 

Mais rmdir supprime uniquement un sous-dossier avec ID (/12 345), mais le dossier Report_1 est toujours là, mais est vide. J'ai essayé écho "% ~ dp0Export \ Report_ id! \" et il semble correct.

donc à la fin de la structure de script ressemble à ceci:

./Export 
     /Report_1 
     /Report_2 
     ... 

et je dois supprimer des dossiers Report_1 et ainsi de suite, aussi bien.

Si je commande Copier à la console cela fonctionne, mais dans le script batch il ne fonctionne pas la façon dont j'ai besoin.

+0

C'est _batch_ programmation sous Windows et non la programmation _bash_ sur les systèmes * nix. Suppression de l'étiquette – Inian

+0

Merci pour l'édition. Mon erreur. – Bulva

+0

1. Remplacez 'cd Export' par' cd/D "% ~ dp0Export" '; remplacer 'cd Report _ %% a' par' pushd "Rapporter _ %% ~ a" '; ajouter 'popd' après la fermeture') 'de la boucle' for/R %% f'; retirez 'cd ..'. 2. Changez la boucle externe: 'pour/D %% I dans ("% ~ dp0Export \ Report_ * ") do (3. Il n'y a pas besoin de la boucle' for %% S', il suffit d'accéder '%% ~ zf' à la place 4. Définissez la variable 'input' à' %% ~ fI' 5. Ne définissez pas la variable 'id', accédez simplement' %% ~ a' 6. Utilisez des guillemets: 'move" %% ~ f » "% ~ dp0new_reports \ new_report _ %% ~ un"' 7. Modifiez la ligne de commande 'rmdir'.' rmdir/S/Q "% ~ dp0Export \ %% ~ I" ' – aschipfl

Répondre

0

Would quelque chose comme ce costume votre but? J'ai créé les nouveaux répertoires dans le répertoire Export pour l'instant, juste pour tout garder ensemble. Remplacez "new_reports\new_report_!input:*_=!" par "%~dp0new_reports\new_report_!input:*_=!" dans les deux emplacements pour passer à la structure de votre choix.

+0

Merci beaucoup I.. je l'ai – Bulva