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

ligne de commande fichier batch avec paramêtres

5 réponses
Avatar
Noisette
bonjour,

j'ai fait une macro qui sauvegarde le répertoire "CCP" sur un CD en faisant
appel à un fichier bat.
J'ai créé plusieur utlisateurs de façon à ne pas utiliser le compte
administrateur créé à l'installation de XP.
Je me suis alors aperçu que je devais modifier le chemin d'accés à mon
répertoire CCP dans le fichier bat.
Au lieu de : "c:\Documents and settings\Aministrateur\Mes Documents\CCP"
il me fallait : "c:\Documents and settings\Jean\Mes Documents\CCP"
J'ai donc affecté la valeur Cheminutil (ci-dessous) à une variable
d'extension qui paramêtre l'appel du fichier "Fichcomd.bat"
en fonction de l'utilisateur qui l'appelle

or si chaque paramêtre pris seul se présente comme une chaine cadrée par des
guillemets comme ce qui suit:
fiba => "Fichcomd.bat" (nom du fichier de commande qui est dans le
répertoire racine)
dr => "e" (nom de l'unité du graveur CD)
Cheminutil => "c:\Documents and settings\Jean\Mes Documents\CCP"

une fois inclus dans la ligne de commande cela devient:

fiba & " " & dr & " " & Cheminutil => "Fichcomd.bar e c:\Documents and
settings\Jean\Mes Documents\CCP"

et le système reconnait "C:\Documents" comme variable %2 et bien sûr ça ne
marche pas.
j'ai essayé de trouver une solution pour encadrer la variable %2 par des
guillemets lorsqu'elle est utilisée par le fichier "bat" ou alors la
convertir en nom court mais je cale.
Existe-t-il une solution?
merci pour les réponses éventuelles
Noisette
nota: la partie de la macro qui utilise les API a été fournie par un
"crack", dont je n'ai pas pu retrouver le nom, sur le forum d'excel

**************************************

Option Explicit
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long,
_
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long 'déclaration de
fonction _
API tempo du code vba

Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long,
_
lpExitCode As Long) As Long 'déclaration de
fonction API sortie du code DOS et retour à VBA
'ces deux api
effectuent une boucle et ne rendent lamain à Excel que
'lorsque les tfaches
du système d'exploitation sont finies
'permet la cde de la fermeture ou de l'ouverture de tiroir du graveur
Private Declare Function mciSendString& Lib _
"winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand$, ByVal lpstrReturnString$, _
ByVal uReturnLength&, ByVal hwndCallback&)




Sub RunCharMap3()
Dim fiba As String
Dim dr as String
Dim TaskID As Long
Dim hProc As Long
Dim lExitCode As Long
Dim ACCESS_TYPE As Integer, STILL_ACTIVE As Integer
Dim program As String
Dim CheminUtil As String

fiba = "FichComd.bat" 'fichier de commande
dr = "e" 'lettre de l'unité du graveur
ACCESS_TYPE = &H400
STILL_ACTIVE = &H103

CheminUtil = Left(Application.DefaultFilePath,
Len(Application.DefaultFilePath) - 1) 'au lieu de: Cheminutil
= "c:\Documents and 'settings\Jean\Mes Documents\CCP"

program = fiba & " " & dr & " " & CheminUtil 'ligne de
commande d'appel du fichier bat avec

On Error Resume Next 'évite l'arrét
du programme si "Err" <> 0
Err.Clear

'affectation de la tache à une var
TaskID = Shell(program, 1)

'lance le processus
hProc = OpenProcess(ACCESS_TYPE, False, TaskID)

If Err <> 0 Then
MsgBox program & "ne peut pas démarrer ", vbCritical, "Error"
End
End If

Do 'boucle
verifie la présence active du processus
GetExitCodeProcess hProc, lExitCode
DoEvents 'autorise le
système d'exploitation a faire ses interventions
Loop While lExitCode = STILL_ACTIVE

'la sauvegarde est terminée
End Sub


******************************



Fichier batch utilisé: "Fichcomd.bat"
********************************
rem copie le repertoire "c:\Documents and settings\Jean\Mes Documents\CCP"
sur le CD
%1:
if exist %1:\CCP\NUL goto execution

:création
md CCP

echo un dossier CCP a été crée

:execution
rem les deux lignes suivantes sont là pour voir la valeur de %2
echo %2
pause
rem la ligne suivante est la commande que je voudrais faire fonctionner
rem xcopy %2 %1:\CCP /D /S

xcopy "c:\Documents and settings\Jean\Mes Documents\CCP" %1:\ccp /D /S
c:

5 réponses

Avatar
Quetzalcoatl
Bonsoir,

fiba & " " & dr & " """ & Cheminutil & """
Avatar
MichDenis
" /c " => ferme la fenêtre Dos à la fin de l'opération
Dim C as String, A as String, B as String, D as String, E As Long

la Variable C => Le chemin et le nom du batch file : "C:JPS.bat"
La Variable A => Variable devant remplacer la variable %1 dans ton batch file
La Variable B => Variable devant rempacer la variable %2 dans ton batch file

D = Environ("comspec") & " /c " & C & " " & A & " " & B & ""
E = Shell(D, 1) '=> exécution du batch file avec les variables désirées

Tu dois une fiêre chandelle à JPS !!!!!!!!!!!!



"Noisette" a écrit dans le message de news:

bonjour,

j'ai fait une macro qui sauvegarde le répertoire "CCP" sur un CD en faisant
appel à un fichier bat.
J'ai créé plusieur utlisateurs de façon à ne pas utiliser le compte
administrateur créé à l'installation de XP.
Je me suis alors aperçu que je devais modifier le chemin d'accés à mon
répertoire CCP dans le fichier bat.
Au lieu de : "c:Documents and settingsAministrateurMes DocumentsCCP"
il me fallait : "c:Documents and settingsJeanMes DocumentsCCP"
J'ai donc affecté la valeur Cheminutil (ci-dessous) à une variable
d'extension qui paramêtre l'appel du fichier "Fichcomd.bat"
en fonction de l'utilisateur qui l'appelle

or si chaque paramêtre pris seul se présente comme une chaine cadrée par des
guillemets comme ce qui suit:
fiba => "Fichcomd.bat" (nom du fichier de commande qui est dans le
répertoire racine)
dr => "e" (nom de l'unité du graveur CD)
Cheminutil => "c:Documents and settingsJeanMes DocumentsCCP"

une fois inclus dans la ligne de commande cela devient:

fiba & " " & dr & " " & Cheminutil => "Fichcomd.bar e c:Documents and
settingsJeanMes DocumentsCCP"

et le système reconnait "C:Documents" comme variable %2 et bien sûr ça ne
marche pas.
j'ai essayé de trouver une solution pour encadrer la variable %2 par des
guillemets lorsqu'elle est utilisée par le fichier "bat" ou alors la
convertir en nom court mais je cale.
Existe-t-il une solution?
merci pour les réponses éventuelles
Noisette
nota: la partie de la macro qui utilise les API a été fournie par un
"crack", dont je n'ai pas pu retrouver le nom, sur le forum d'excel

**************************************

Option Explicit
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long,
_
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long 'déclaration de
fonction _
API tempo du code vba

Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long,
_
lpExitCode As Long) As Long 'déclaration de
fonction API sortie du code DOS et retour à VBA
'ces deux api
effectuent une boucle et ne rendent lamain à Excel que
'lorsque les tfaches
du système d'exploitation sont finies
'permet la cde de la fermeture ou de l'ouverture de tiroir du graveur
Private Declare Function mciSendString& Lib _
"winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand$, ByVal lpstrReturnString$, _
ByVal uReturnLength&, ByVal hwndCallback&)




Sub RunCharMap3()
Dim fiba As String
Dim dr as String
Dim TaskID As Long
Dim hProc As Long
Dim lExitCode As Long
Dim ACCESS_TYPE As Integer, STILL_ACTIVE As Integer
Dim program As String
Dim CheminUtil As String

fiba = "FichComd.bat" 'fichier de commande
dr = "e" 'lettre de l'unité du graveur
ACCESS_TYPE = &H400
STILL_ACTIVE = &H103

CheminUtil = Left(Application.DefaultFilePath,
Len(Application.DefaultFilePath) - 1) 'au lieu de: Cheminutil
= "c:Documents and 'settingsJeanMes DocumentsCCP"

program = fiba & " " & dr & " " & CheminUtil 'ligne de
commande d'appel du fichier bat avec

On Error Resume Next 'évite l'arrét
du programme si "Err" <> 0
Err.Clear

'affectation de la tache à une var
TaskID = Shell(program, 1)

'lance le processus
hProc = OpenProcess(ACCESS_TYPE, False, TaskID)

If Err <> 0 Then
MsgBox program & "ne peut pas démarrer ", vbCritical, "Error"
End
End If

Do 'boucle
verifie la présence active du processus
GetExitCodeProcess hProc, lExitCode
DoEvents 'autorise le
système d'exploitation a faire ses interventions
Loop While lExitCode = STILL_ACTIVE

'la sauvegarde est terminée
End Sub


******************************



Fichier batch utilisé: "Fichcomd.bat"
********************************
rem copie le repertoire "c:Documents and settingsJeanMes DocumentsCCP"
sur le CD
%1:
if exist %1:CCPNUL goto execution

:création
md CCP

echo un dossier CCP a été crée

:execution
rem les deux lignes suivantes sont là pour voir la valeur de %2
echo %2
pause
rem la ligne suivante est la commande que je voudrais faire fonctionner
rem xcopy %2 %1:CCP /D /S

xcopy "c:Documents and settingsJeanMes DocumentsCCP" %1:ccp /D /S
c:
Avatar
Noisette
bonjour,
c'est ok, les deux réponses m'ont servi, celle de Querzalcoatl qui répond
directement à ma question et celle de MichDenis qui me permet de simplifier
grandement ma macro(que la chandelle de JPS brille longtemps dans
l'obscurité de mon ignorance!)
encore merci
Noisette

"Noisette" a écrit dans le message de news:

bonjour,

j'ai fait une macro qui sauvegarde le répertoire "CCP" sur un CD en
faisant appel à un fichier bat.............
.................................................................


Avatar
Ar
bonjour,

j'ai fait une macro qui sauvegarde le répertoire "CCP" sur un CD en faisant
appel à un fichier bat.
J'ai créé plusieur utlisateurs de façon à ne pas utiliser le compte
administrateur créé à l'installation de XP.
Je me suis alors aperçu que je devais modifier le chemin d'accés à mon
répertoire CCP dans le fichier bat.
Au lieu de : "c:Documents and settingsAministrateurMes DocumentsCCP"
il me fallait : "c:Documents and settingsJeanMes DocumentsCCP"


la variable %userprofile% te donnera "c:Documents and settingsJean"


"%userprofile%Mes DocumentsCCP" devrait marcher

Avatar
Noisette
Salut Ar,
Effectivement cela marche et désolé pour le retard à te répondre, je n'ai
pas regardé le site depuis une bonne semaine
merci pour ton aide
Noisette

"Ar" <""ar6"@free.fr - je ne lie pas ces email"> a écrit dans le message de
news: 46800cc1$0$26380$
bonjour,

j'ai fait une macro qui sauvegarde le répertoire "CCP" sur un CD en
faisant appel à un fichier bat.
J'ai créé plusieur utlisateurs de façon à ne pas utiliser le compte
administrateur créé à l'installation de XP.
Je me suis alors aperçu que je devais modifier le chemin d'accés à mon
répertoire CCP dans le fichier bat.
Au lieu de : "c:Documents and settingsAministrateurMes
DocumentsCCP"
il me fallait : "c:Documents and settingsJeanMes DocumentsCCP"


la variable %userprofile% te donnera "c:Documents and settingsJean"


"%userprofile%Mes DocumentsCCP" devrait marcher