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

script vbs

11 réponses
Avatar
ephores
Bonjour,

Savez comment autoriser un script en VBS à écrire sur un dossier sous XP ?

Je m"explique j'ai fais un prog qui lui meme fais un script vbs , ce script
contient les commandes pour copier des fichier d'un endroit à un autre. Mon
problème est qu'à l'execution de ce VBS, j'ai ce message d'erreur : " erreur
: permission refusée ; code : 800A0046"
J'ai beau etre logué en admin, donner toutes les autorisation possible au
dossier cible, mais rien n'y fais, j'ai meme essayé un partage reseau avec
autorisation total à tous le monde.
Si quelqu'un à une idée....


Vous aller me dire; fais un bat au lieu du vbs, mais j'ai un autre problème
avec les bats, les " ç " devienne des Alpha une fois passé en ligne de
commande, si bien que j'ai le message : " fichier introuvable "

Si quelqu'un a une soluce je suis preneur ;-)

En tous cas merci d'avance de faire partager votre savoir.

10 réponses

1 2
Avatar
François Picalausa
Hello,

Pourquoi ne pas effectuer la copie directement à partir du programme (VB?)
plutôt que de générer un script intermédiaire?

Pour un programme en VB, voir la faq:
http://faq.vb.free.fr/index.php?rubrique

Par scripting, tu peux employer le filesystemobject:
http://msdn.microsoft.com/library/en-us/script56/html/sgProgrammingFileSystemObject.asp
http://msdn.microsoft.com/library/en-us/script56/html/jsmthCopyFile.asp

Si ça ne fonctionne pas mieux, post un bout de code, peut-être que cela
pourra nous aider à cerner le problème!

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
Je m"explique j'ai fais un prog qui lui meme fais un script vbs , ce
script contient les commandes pour copier des fichier d'un endroit à
un autre. Mon problème est qu'à l'execution de ce VBS, j'ai ce
message d'erreur : " erreur
permission refusée ; code : 800A0046"


Avatar
ephores
Merci François !

losque j'utilise Filecopy j'ai un message d'erreur m'indiquant " une erreur
dans le chemin d'accès", je dois faire une erreur de syntaxe mais je ne vois
pas laquelle.Voici mon code :

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

For i = 0 To List1.ListCount - 1

ligne = Trim(List1.List(i))
vers = Trim(List2.List(i))

FileCopy ligne, vers ' pourtant lorsque je pointe mon curseur sur
ligne et vers , j'optiens bien la bonne adresse

Next
******************

J'avais pensé au script ou au bat car pour pouvoir faire l'execution plus
tard, c'est à dire la programmé, mais c'est pas le plus important , si
j'arrive à le faire avec filecopy ça me convient, mais ne va - t - il pas me
poser des problème d'autorisation comme dans mon script?

"François Picalausa" a écrit dans le message de
news:
Hello,

Pourquoi ne pas effectuer la copie directement à partir du programme (VB?)
plutôt que de générer un script intermédiaire?

Pour un programme en VB, voir la faq:
http://faq.vb.free.fr/index.php?rubrique

Par scripting, tu peux employer le filesystemobject:



http://msdn.microsoft.com/library/en-us/script56/html/sgProgrammingFileSystemObject.asp
http://msdn.microsoft.com/library/en-us/script56/html/jsmthCopyFile.asp

Si ça ne fonctionne pas mieux, post un bout de code, peut-être que cela
pourra nous aider à cerner le problème!

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
> Je m"explique j'ai fais un prog qui lui meme fais un script vbs , ce
> script contient les commandes pour copier des fichier d'un endroit à
> un autre. Mon problème est qu'à l'execution de ce VBS, j'ai ce
> message d'erreur : " erreur
> permission refusée ; code : 800A0046"





Avatar
François Picalausa
Hello,

Est-ce que le dossier de destination existe? (VB ne copiera le fichier que
si le dossier de destination existe)
Est-ce que vers représente bien un fichier et non un dossier?

Tu peux effectuer les tests suivants sur tes path pour savoir ce qui ne va
pas:
Option Explicit

Private Sub Command1_Click()
Const src = "c:autoexec.bat"
Const dst = "e:mydatatest.toto"

If Not FolderExists(GetParentFolder(dst)) Then
MsgBox "Le dossier parent de la destination n'existe pas!"
Exit Sub
End If

If Not FileExists(src) Then
MsgBox "Le fichier source n'existe pas!"
Exit Sub
End If

If FolderExists(dst) Then
MsgBox "Un dossier porte le nom du fichier de destination!"
Exit Sub
End If

FileCopy src, dst
End Sub

Private Function FileExists(strPath As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(strPath) And vbDirectory) = 0)
End Function

Private Function FolderExists(strPath As String) As Boolean
On Error Resume Next
FolderExists = (GetAttr(strPath) And vbDirectory)
End Function

Private Function GetParentFolder(strPath As String) As String
GetParentFolder = Left$(strPath, InStrRev(strPath, ""))
End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
Merci François !

losque j'utilise Filecopy j'ai un message d'erreur m'indiquant " une
erreur dans le chemin d'accès", je dois faire une erreur de syntaxe
mais je ne vois pas laquelle.Voici mon code :


Avatar
ephores
Merci de m'avoir répondu si vite !
effectivement " vers " pointe un dossier, comment faut il faire ?
je dois copier des fichiers vers un dossier.



"François Picalausa" a écrit dans le message de
news:%
Hello,

Est-ce que le dossier de destination existe? (VB ne copiera le fichier que
si le dossier de destination existe)
Est-ce que vers représente bien un fichier et non un dossier?

Tu peux effectuer les tests suivants sur tes path pour savoir ce qui ne va
pas:
Option Explicit

Private Sub Command1_Click()
Const src = "c:autoexec.bat"
Const dst = "e:mydatatest.toto"

If Not FolderExists(GetParentFolder(dst)) Then
MsgBox "Le dossier parent de la destination n'existe pas!"
Exit Sub
End If

If Not FileExists(src) Then
MsgBox "Le fichier source n'existe pas!"
Exit Sub
End If

If FolderExists(dst) Then
MsgBox "Un dossier porte le nom du fichier de destination!"
Exit Sub
End If

FileCopy src, dst
End Sub

Private Function FileExists(strPath As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(strPath) And vbDirectory) = 0)
End Function

Private Function FolderExists(strPath As String) As Boolean
On Error Resume Next
FolderExists = (GetAttr(strPath) And vbDirectory)
End Function

Private Function GetParentFolder(strPath As String) As String
GetParentFolder = Left$(strPath, InStrRev(strPath, ""))
End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
> Merci François !
>
> losque j'utilise Filecopy j'ai un message d'erreur m'indiquant " une
> erreur dans le chemin d'accès", je dois faire une erreur de syntaxe
> mais je ne vois pas laquelle.Voici mon code :




Avatar
François Picalausa
Hello,

Essaye ceci:
Private Sub Command1_Click()
Const src = "c:autoexec.bat"
Const dst = "e:mydata"

FileCopy src, dst & GetFileName(src)
End Sub

'Retrouve la partie nom de fichier à partir d'un path
'(partie suivant le dernier backslash)
Private Function GetFileName(strPath As String)
GetFileName = Mid$(strPath, InStrRev(strPath, "") + 1)
End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
Merci de m'avoir répondu si vite !
effectivement " vers " pointe un dossier, comment faut il faire ?
je dois copier des fichiers vers un dossier.


Avatar
François Picalausa
Hello,

En fonction du type d'entrée (utilisateur, constante, ...), on peut
effectuer des tests supplémentaires pour s'assurer que la copie se passe au
mieux:

Private Sub Command1_Click()
Const src = "c:autoexec.bat"
Const dst = "e:mydata"

FileCopy src, NormalizePath(dst) & GetFileName(src)
End Sub

'Retrouve la partie nom de fichier à partir d'un path
'(partie suivant le dernier backslash)
Private Function GetFileName(strPath As String)
GetFileName = Mid$(strPath, InStrRev(strPath, "") + 1)
End Function

'Si le path n'est pas un fichier
'et ne se termine pas par
'on ajoute
Private Function NormalizePath(strPath As String) As String
If Right$(strPath, 1) = "" Or FileExists(strPath) Then
NormalizePath = strPath
Else
NormalizePath = strPath & ""
End If
End Function

Private Function FileExists(strPath As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(strPath) And vbDirectory) = 0)
End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
Avatar
ephores
Merci François , mais ça ne marche pas,
si je mets : Const src = ligne
il me mets " Constante requise "
la source et la destination n'est jamais la meme.

C'est si compliqué en VB de copier un fichier dans un dossier ? je ne
croyais pas ce language si casse-tête.
En tout cas merci je vais continué à chercher.



"François Picalausa" a écrit dans le message de
news:%
Hello,

En fonction du type d'entrée (utilisateur, constante, ...), on peut
effectuer des tests supplémentaires pour s'assurer que la copie se passe


au
mieux:

Private Sub Command1_Click()
Const src = "c:autoexec.bat"
Const dst = "e:mydata"

FileCopy src, NormalizePath(dst) & GetFileName(src)
End Sub

'Retrouve la partie nom de fichier à partir d'un path
'(partie suivant le dernier backslash)
Private Function GetFileName(strPath As String)
GetFileName = Mid$(strPath, InStrRev(strPath, "") + 1)
End Function

'Si le path n'est pas un fichier
'et ne se termine pas par
'on ajoute
Private Function NormalizePath(strPath As String) As String
If Right$(strPath, 1) = "" Or FileExists(strPath) Then
NormalizePath = strPath
Else
NormalizePath = strPath & ""
End If
End Function

Private Function FileExists(strPath As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(strPath) And vbDirectory) = 0)
End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net





Avatar
François Picalausa
Hello,

Les constantes n'étaient là que parce qu'il s'agit d'un exemple et que le
remplissage de variables n'était pas le point important!
Dans ton projet, ça devrait donner:
For i = 0 To List1.ListCount - 1

ligne = Trim(List1.List(i))
vers = Trim(List2.List(i))

FileCopy ligne, NormalizePath(vers) & GetFileName(ligne)
Next

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
si je mets : Const src = ligne
il me mets " Constante requise "
la source et la destination n'est jamais la meme.


Avatar
ephores
voila l'erreur que j'ai à la compilation à la ligne :

FileCopy ligne, NormalizePath(vers) & GetFileName(ligne)

'type d'argument " byref" incompatible , vers est en surbrillance.

"François Picalausa" a écrit dans le message de
news:
Hello,

Les constantes n'étaient là que parce qu'il s'agit d'un exemple et que le
remplissage de variables n'était pas le point important!
Dans ton projet, ça devrait donner:
For i = 0 To List1.ListCount - 1

ligne = Trim(List1.List(i))
vers = Trim(List2.List(i))

FileCopy ligne, NormalizePath(vers) & GetFileName(ligne)
Next

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
> si je mets : Const src = ligne
> il me mets " Constante requise "
> la source et la destination n'est jamais la meme.




Avatar
ephores
j'ai trouvé une soluce pour le problème du bat,
losque le nom du fichier comporte un " ç " le programme renomme le fichier
en remplaçant le " ç " par des "c"
voici le code pour ceux que ça interesse :

chemin = File1.Path & "" & File1.FileName

If InStr(File1.FileName, "ç") Then
newchemin = Replace(chemin, "ç", "c")
Name chemin As newchemin
Else
newchemin = chemin
End If


List1.AddItem (newchemin)





"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
Bonjour,

Savez comment autoriser un script en VBS à écrire sur un dossier sous XP ?

Je m"explique j'ai fais un prog qui lui meme fais un script vbs , ce


script
contient les commandes pour copier des fichier d'un endroit à un autre.


Mon
problème est qu'à l'execution de ce VBS, j'ai ce message d'erreur : "


erreur
: permission refusée ; code : 800A0046"
J'ai beau etre logué en admin, donner toutes les autorisation possible au
dossier cible, mais rien n'y fais, j'ai meme essayé un partage reseau


avec
autorisation total à tous le monde.
Si quelqu'un à une idée....


Vous aller me dire; fais un bat au lieu du vbs, mais j'ai un autre


problème
avec les bats, les " ç " devienne des Alpha une fois passé en ligne de
commande, si bien que j'ai le message : " fichier introuvable "

Si quelqu'un a une soluce je suis preneur ;-)

En tous cas merci d'avance de faire partager votre savoir.




1 2