OVH Cloud OVH Cloud

Auto-effacer un bat

23 réponses
Avatar
~Jean-Marc~ [MVP]
Bonjour à tous,

petit quizzzzzzz..... :-)

Il arrive de temps à autre que j'aie à lancer des batchs qui
ne servent qu'une fois (des installations, souvent).

Pour ne pas laisser trainer des bat partout sur le disque dur,
j'utilise cette astuce :

Au début du bat :
set bat=%0%

Et en dernière ligne :
start /B %comspec% /c "ping 127.0.0.1 -n 5 && del /f %bat%"

Je serais curieux de savoir si vous avez une autre méthode ?
(en bat de préférence, autres languages acceptés... ;-) )

@+

--
~Jean-Marc~ MVP Shell/User Fr
( Vista x86 Ultimate )
- http://msmvps.com/blogs/docxp/ -
- http://docxp.mvps.org -

10 réponses

1 2 3
Avatar
Méta-MCI \(MVP\)
Bonsoir !

L'explication, est dans le (ou les deux) premier(s) caractère(s)
renvoi dans un (nouveau) fichier
ajoute dans le fichier



%rm% contient le nom du fichier.

Mais, il est vrai que Gilles a opté pour une syntaxe peu courante (redirection a priori, et non a
posteriori).

@+

Michel Claveau


Avatar
~Jean-Marc~ [MVP]
Salut Méta-MCI (MVP),
tu nous disais :
à tordu, tordu et demi :

@echo off

set bat=%~dpnx0%
echo %bat%
::
::
::
set h=%time:~0,2%
set m=%time:~3,2%
set /Am=m+1
if /I %m% GEQ 60 (
set /Ah+=1
set /Am-`
)
if /I %h% GEQ 24 set /Ah-$
at %h%:%m% cmd /c del /f %bat%


Wow !

--
~Jean-Marc~ MVP Shell/User Fr
( Vista x86 Ultimate )
- http://msmvps.com/blogs/docxp/ -
- http://docxp.mvps.org -

Avatar
jbongran
Méta-MCI (MVP) wrote:
Bonsoir !

L'explication, est dans le (ou les deux) premier(s) caractère(s)
renvoi dans un (nouveau) fichier
ajoute dans le fichier



%rm% contient le nom du fichier.

Mais, il est vrai que Gilles a opté pour une syntaxe peu courante
(redirection a priori, et non a posteriori).

@+

Michel Claveau


Merci Michel.
Je comprend mieux maintenant: j'avait pris ces caractères pour une fantaisie
d'outlook quotefix.
Du coup le bout de code que j'ai posté manque de ces caractères en suffixe
de ligne, à corriger donc ;-(



Avatar
moi
Notre ami ~Jean-Marc~ [MVP] tapota :

Bonjour à tous,

petit quizzzzzzz..... :-)

Il arrive de temps à autre que j'aie à lancer des batchs qui
ne servent qu'une fois (des installations, souvent).



salut à tous et à toutes ...

Franchement, je n'imaginais pas tant de propositions sur un thème
aussi arride ;o)
L'inspiration surgit parfois de façon bien curieuse ...

Ceci étant, j'ai l'impression que certaines solutions sont "un peu
compliquées" et necessiteront "a priori" des autorisations plus ou
moins importantes sur l'environnement ( la solution avec "at" suppose
pas mal de choses, par exemple).
Perso, je préfère les solutions minimales en terme de "pouvoir" pour
appliquer tout ça, le cas échéant, dans un domaine 2003 avec des
stratégies de groupes un peu blindées ;o)

Il me semble que les solutions proposées en premier sont les moins
gourmandes en ce sens mais j'ai qq doutes ...

Qqun a des idées précises en ce sens ?

A+

HB

Avatar
Gilles LAURENT [MVP]
"jbongran" a écrit dans le message de
news:%23eum$

Bonjour Jérôme,

| Petites variantes pour l'appel du vbs, qui n'a d'autre interêt que
| d'éviter de parcourir la collection arguments, permettre le "retry"
| au cas où le bat ne serait pas encore fermé, et l'usage de cscript au
| lieu de wscript, permettant, au moins sur ma machien, d'éviter une
| fenêtre d'avertissement ;-)

Bien joué ! Par contre concernant la fenêtre d'avertissement, je
n'arrive pas à reproduire :-( J'utilisais volontairement Wscript pour
éviter l'apparition furtive d'une nouvelle console.

| Ps pour Gilles Laurent: je n'ai pas compris l'usage du %rm% en
| préfixe de chaque ligne, tu peux m'en dire plus ?

Hé hé ! Cf réponse de Michel !
J'ai essayé de brouiller les pistes :-)

Deux petites corrections tout de même, les guillemets étant nécessaires
dans ce cas ;-)

| %rm% echo Do Until oFs.FileExists %~dpnx0%
%rm% echo Do Until oFs.FileExists "%~dpnx0%"



| %rm% echo oFs.DeleteFile %~dpnx0%,True
%rm% echo oFs.DeleteFile "%~dpnx0%",True



--
Gilles LAURENT [MVP]
http://glsft.free.fr


Avatar
Do Ré Mi Chel La Si Do.
Bonjour !


La solution la plus indépendante, en termes de droits, c'est :

set bat=%~dpnx0%
:::
:::
echo del /f %bat%>%TEMP%DELE.BAT & %TEMP%DELE.BAT

Car on reste dans le même processus.
Avatar
Jacques Barathon [MS]
"Do Ré Mi Chel La Si Do." wrote in message
news:%
Bonjour !


La solution la plus indépendante, en termes de droits, c'est :

set bat=%~dpnx0%
:::
:::
echo del /f %bat%>%TEMP%DELE.BAT & %TEMP%DELE.BAT


Dans la mesure où aucune solution proposée ne s'occupe de vérifier si la
suppression a bien eu lieu, ni même de logguer l'information pour que
l'utilisateur puisse le vérifier à postériori, je reviens sur la solution la
plus simple:

set bat=%~dpnx0%
:::
:::
del /f %bat%

Le fait que la tentative de rechargement du fichier donne une erreur n'a
aucune importance dans ce contexte. Ce qui compte, c'est que le fichier a
bien été supprimé.

Jacques

Avatar
Do Ré Mi Chel La Si Do.
Salut !


donne une erreur n'a aucune importance


Au contraire : ça prouve l'effacement.
Pas de message = suppression non effectuée.


@+

MCI

Avatar
Gilles LAURENT [MVP]
"Jacques Barathon [MS]" a écrit dans le
message de
news:

Bonjour Jacques,

| del /f %bat%

C'est en effet la solution la plus simple. Toutefois il est à noter que
la variable errorlevel sera reinitialisée à la valeur 0. Ceci peut être
problématique dans le cas d'un enchaînement s'appuyant sur le code de
sortie du batch.

--- Couper ici : batch.bat ---
@echo off

error

del /f %~dpnx0
--- Couper ici : batch.bat ---

C:>batch.bat
'error' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
Le fichier de commandes est introuvable.

C:>echo %errorlevel%
0

Donc à mon avis, la solution la plus "générique" consiste à créer un
nouveau processus dédié à la suppression du fichier batch. Cette
technique n'altérant pas la variable errorlevel. Par exemple :

--- Couper ici : batch.bat ---
@echo off
set rm=%temp%rm.vbs
%rm% echo Set oFs=CreateObject("Scripting.FileSystemObject")
%rm% echo oFs.DeleteFile WScript.ScriptFullName,True
%rm% echo oFs.DeleteFile "%~dpnx0",True



error

start wscript %rm%
--- Couper ici : batch.bat ---

C:>batch.bat
'error' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.

C:>echo %errorlevel%
9009

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr


Avatar
Jacques Barathon [MS]
"Gilles LAURENT [MVP]" wrote in message
news:
"Jacques Barathon [MS]" a écrit dans le
message de
news:

Bonjour Jacques,

| del /f %bat%

C'est en effet la solution la plus simple. Toutefois il est à noter que
la variable errorlevel sera reinitialisée à la valeur 0. Ceci peut être
problématique dans le cas d'un enchaînement s'appuyant sur le code de
sortie du batch.


C'est pas faux :-)

Jacques

1 2 3