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.
C'est _batch_ programmation sous Windows et non la programmation _bash_ sur les systèmes * nix. Suppression de l'étiquette – Inian
Merci pour l'édition. Mon erreur. – Bulva
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