Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

CMD : Pb de guillemets

9 réponses
Avatar
moi
bonsoir,

j'ai toujours eu du mal avec les histoires de guillemets ...

J'ai 4 "procédures" dans un cmd
pour faire "du ménage" :

DELFICH arg
doit effacer le(s) fichier(s) transmis en argument
et j'aimerais que les caractères ? et * soient acceptés.

ex :
CALL :DELFICH "F:\TEMP\tant peu\AC2.jpg"
CALL :DELFICH "F:\TEMP\tant peu\AB?.gif"

DELTYP arg1 arg2
doit détruire les fichiers situés dans le répertoire arg1
et dont l'extension est arg2
( en traitant les ss repertoires)

ex :
CALL :DELTYP "F:\TEMP\tant peu" rtf

VIDER arg
doit vider sans le détruire le répertoire transmis en argument
ex :
CALL :VIDER "F:\TEMP\tant peu\a vider"

SUPPREP arg
doit supprimer totalement le répertoire transmis en argument
ex :
CALL :SUPPREP "F:\TEMP\tant peu\bidon"

J'ai l'impression que les fichiers cachés passent à travers
et surtout
j'ai des pb avec les guillemets...

Après plusieurs tests "presque bons"
j'ai décidé de mettre systématiquement les arguments entre guillemets
(sauf arg2 de DELTYP )
mais en fait, j'ai l'impression que d'autres pb surgissent...

J'aurais donc besoin de certitudes et d'un bon coup de pouce ....

Je vous en remercie par avance.


Voici les procédures :

:: ===================================
:DELFICH
if exist %1 (
DEL /F /Q %1
)
GOTO :EOF
:: ===================================
:DELTYP
if exist %1 (
DEL /F /S /Q "%1\*.%2"
)
GOTO :EOF
:: ===================================
:SUPPREP
if exist %1 (
RD /S /Q %1
)
GOTO :EOF
:: ===================================
:VIDER
if exist %1 (
FOR /D %%n IN ("%1\*") DO RD /S /Q "%%n"
DEL /F /S /Q "%1\*"
)
GOTO :EOF
:: ===================================

HB

9 réponses

Avatar
MCI \(ex do ré Mi chel la si do\) [MVP]
Bonsoir !

Je n'ai plus le temps de regarder en détail, avant d'aller dormir.
Mais, pour vider un dossier, on peut faire : DEL "dossier" /S /Q (ou
DEL "%1" /S /Q)
On peut aussi utiliser plusieurs "patterns" ; par exemple :
del "dossier*.txt" "dossier*.hta" "dossier*.old" /s /q

@-salutations
--
MCI
Avatar
Philemil
Bonjour

moi a écrit :
bonsoir,

j'ai toujours eu du mal avec les histoires de guillemets ...



moi aussi :-)

J'ai 4 "procédures" dans un cmd
pour faire "du ménage" :



../..


Après plusieurs tests "presque bons"
j'ai décidé de mettre systématiquement les arguments entre guillemets
(sauf arg2 de DELTYP )
mais en fait, j'ai l'impression que d'autres pb surgissent...

J'aurais donc besoin de certitudes et d'un bon coup de pouce ....

Je vous en remercie par avance.


Voici les procédures :



> ex :
> CALL :DELTYP "F:TEMPtant peu" rtf
>
../..
>



.../...
> :DELTYP
> if exist %1 (
> DEL /F /S /Q "%1*.%2"
> )
> GOTO :EOF


L'argument %1 reçoit les guillemets, donc cela donne comme résultat
DEL /F /S /Q ""argument1"*.extension"

La commande DEL ne va pas apprécier

Il y a lieu de rajouter un tilde pour supprimer les guillemets de
l'argument passé (qui sont bien sûr indispensable pour former 1 seul
argument malgré les espaces)

:DELTYP
if exist %1 (
DEL /F /S /Q "%~1*.%~2"
)
GOTO :EOF

enfin il me semble ?
bonne journée
Philippe
Avatar
MCI \(ex do ré Mi chel la si do\) [MVP]
Bonjour !

L'argument %1 reçoit les guillemets, donc cela donne comme résultat
DEL /F /S /Q ""argument1"*.extension"



Toutafé.


Il y a lieu de rajouter un tilde pour supprimer les guillemets



C'est une solution. Mais, on peut, simplement, ne pas mettre de
guillemets dans le batch :
:DELTYP
if exist %1 DEL /F /S /Q %1
GOTO :EOF


@-salutations
--
Michel Claveau
Avatar
MCI \(ex do ré Mi chel la si do\) [MVP]
Re !

J'ai oublié de préciser qu'il faut appeler la routine de cette façon :
CALL :DELTYP "F:TEMPtant peu*.rtf"

@+
--
MCI
Avatar
Philemil
MCI (ex do ré Mi chel la si do) [MVP] a écrit :


Bonjour !



Bonjour


L'argument %1 reçoit les guillemets, donc cela donne comme résultat
DEL /F /S /Q ""argument1"*.extension"



Toutafé.


Il y a lieu de rajouter un tilde pour supprimer les guillemets



C'est une solution. Mais, on peut, simplement, ne pas mettre de
guillemets dans le batch :
:DELTYP
if exist %1 DEL /F /S /Q %1
GOTO :EOF





Ce serait faire l'appel avec un seul argument, la routine n'en
comportant pas, comme vous l'indiquez, c'est bien cela ?

CALL :DELTYP "F:TEMPtant peu*.rtf"


Oui, mais le demandeur indique qu'il travaille avec un deuxième argument
avec l'extension des fichiers,

CALL :DELTYP "F:TEMPtant peu" rtf

donc il me semblait nécessaire de virer les guillemets au moins sur le
premier argument,

:DELTYP
if exist %1 DEL /F /S /Q "%~1*.%2"
GOTO :EOF


Il indique également un problème avec les fichiers cachés, la commande
DEL comporte un commutateur /A:H , mais cela va sans doute demander
l'ajout de la ligne, je me trompe ?

:DELTYP
if exist %1 (
DEL /F /S /Q "%~1*.%2"
DEL /F /S /Q /A:H "%~1*.%2"
)
GOTO :EOF

Bonne journée
Philippe
Avatar
Méta-MCI \(MVP\)
Bonjour !

C'est (tout) vrai. Mais, je pense que l'histoire des deux arguments
séparés ne doit pas être vraiment impératif.
Pour les attributs, en plus du H (/A:H), on pourrait ajouter S (système)
et -L (pour exclure les points d'analyse / hardlinks).

@+
--
MCI
Avatar
moi
Méta-MCI (MVP) wrote:
Bonjour !

C'est (tout) vrai. Mais, je pense que l'histoire des deux arguments
séparés ne doit pas être vraiment impératif.
Pour les attributs, en plus du H (/A:H), on pourrait ajouter S
(système) et -L (pour exclure les points d'analyse / hardlinks).




Bonjour à tous et merci,

comme le disait qqun d'autre : " J'adore ce NG"

Je vais m'inspirer de tout ça...
Mes derniers tests sont farpaits [ (c) Obelix ]

- C'est vrai que le second argument est artificiel ...

- J'avais complètement zappé l'utilisation du tilde

Pour les attributs H et S j'avais ajouté une ligne avec Attrib et les
mêmes "descripteurs de fichiers" avant le del ou le RD pour traiter en
force ces pbs
( avec quand nécessaire les commutateurs /S et /D )

Normalement il ne devrait pas y avoir de HardLinks dans les secteurs
visés. Par prudence et pour éviter l'imprévu, j'ajouterais bien /A:-L
mais l'aide en ligne de DEL ne signale pas cette valeur sur ma machine
à la maison ( XP Home) . Les scripts tourneront sur du XP-Pro...
Y aurait -il une différence à ce niveau là entre ces deux OS ?

HB
Avatar
Méta-MCI \(MVP\)
Bonsoir !

Il y a encore des gens sous XP ? C'est incroyable, le conformisme
conservateur de certains informaticiens.
On finira par voir des gens faire des batchs...

Bref, j'ai lancé un XP virtuel, et effectivement, l'aide ne mentionne
pas les points d'analyse (hardlinks). Mais, un petit test avec DEL /A:-L
ne donne pas d'erreur.

J'ai donc créé quelques hardlinks, mais, malheureusement, le /A:-L
n'est pas pris en compte. Les hardlinks sont bel et bien effacés.

Donc, l'option /A: (-)L n'est en effective qu'à partir de Vista.

@-salutations
--
Michel Claveau
Avatar
moi
bonjour,

Il y a encore des gens sous XP ? C'est incroyable, le conformisme
conservateur de certains informaticiens.
On finira par voir des gens faire des batchs...



o;)


Donc, l'option /A: (-)L n'est en effective qu'à partir de Vista.




Je n'avais donc pas rêvé ...

Merci

A+

HB