Comment puis-je supprimer plusieurs fichiers à partir d'un fichier de commandes MS-DOS à l'aide d'un générique lorsque le chemin d'accès contient des espaces?
Dire que j'ai un répertoire avec les fichiers suivants: les
Test.chauve-souris
Test_a.txt
Test_b.txt
Test_v1.zip
Test_v2.zip
Test_v3.zip
Je veux supprimer tous les Test_v*.zip
tranquillement (pas de messages d'erreur connecté à l'écran). Je peux réaliser cela avec le script suivant:
@ECHO OFF
SET OLD_ZIPS=^
C:\Tmp\Test_v*.txt;^
C:\Tmp\Test_a.txt
ECHO Deleting the following files: %OLD_ZIPS%
FOR %%Y IN (%OLD_ZIPS%) DO (
IF EXIST %%Y (
ECHO Deleting %%Y
DEL /Q %%Y)
)
PAUSE
Cela fonctionne bien:
Deleting the following files: C:\Tmp\Test_v*.txt;C:\Tmp\Test_a.txt
Deleting "C:\Tmp\Test_v1.txt"
Deleting "C:\Tmp\Test_v2.txt"
Deleting "C:\Tmp\Test_a.txt"
Press any key to continue . . .
Sauf bien sûr, les chemins de fichier contenant des espaces. Ainsi dans l'exemple ci-dessus, si je change C:\Tmp\Test_v*.txt
à C:\Tmp with spaces\Test_v*.txt
j'obtiens:
Deleting the following files: C:\Tmp test\Test_v*.txt;C:\Tmp test\Test_a.txt
Press any key to continue . . .
Comment puis-je l'arrêter baulking dans les espaces?
Modifier - j'ai essayé des espaces comme par Alex K de réponse (plus un peu plus de débogage) et il semble que peut-être la boucle for n'est pas le fractionnement des choses que j'attends:
@ECHO OFF
SET OLD_ZIPS=^
C:\Tmp test\Test_v*.txt;^
C:\Tmp test\Test_a.txt
ECHO Deleting the following files: %OLD_ZIPS%
FOR %%Y IN (%OLD_ZIPS%) DO (
ECHO Checking existance of "%%Y"
IF EXIST "%%Y" (
ECHO Deleting "%%Y"
DEL /Q "%%Y")
)
PAUSE
..donne moi:
Deleting the following files: C:\Tmp test\Test_v*.txt;C:\Tmp test\Test_a.txt
Checking existance of "C:\Tmp"
Checking existance of "C:\Tmp"
Checking existance of "test\Test_a.txt"
Vous devez vous connecter pour publier un commentaire.
La fonction a besoin de faire une boucle sur chaque ligne individuellement, de sorte que vous besoin de citer la variable dans la boucle FOR, marquer sur les points-virgules, rincer et répéter.
tokens=*
et ne pas obtenir le droit de réponse..semble que vous essayez de plus de compliquer les choses.
est-ce que vous voulez, et peut être tapé en ligne de commande. variation %une %à%un si vous voulez le faire dans un fichier de commandes
Bizarrement, cela semble fonctionner. J'ai editted ma version de ressembler à la vôtre, de sorte s'il vous plaît essayer et modifier les erreurs de syntaxe 😉
Deleting the following files: "C:\Tmp test\Test_v*.txt";"C:\Tmp test\Test_a.txt"; Deleting C:\Tmp test\Test_v1.txt The system cannot find the file specified. Deleting C:\Tmp test\Test_v2.txt The system cannot find the file specified. Deleting "C:\Tmp test\Test_a.txt"
et niTest_v1.txt
niTest_v2.txt
supprimés. Je suis en cours d'exécution sur windows 7 si ça fait une différence?