copier tous ces fichiers (le nombre total de fichiers est aléatoire) dans folder1text.txt
Comment réaliser cela en vbscript?
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma connaissance, d'avoir plusieurs sources et une seule destination, mais la commande COPY le permettant (COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Sub CopyFiles() Dim Fso, Fld, fi, ts, Rep, Cmd Dim Wsh
Rep = "C:Folder1" Set Fso = CreateObject("Scripting.FileSystemObject") Set Fld = Fso.GetFolder(Rep)
For Each fi In Fld.Files If UCase(Left(fi.Name, 4)) = "TEXT" _ And UCase(Right(fi.Name, 3)) = "TXT" Then Cmd = Cmd & Rep & "" & fi.Name & "+" End If Next
If Len(Cmd) > 0 Then On Error Resume Next Kill Rep & "Text.txt" On Error GoTo 0 Set ts = Fso.CreateTextFile(Rep & "cp.bat", True) ts.WriteLine "@Echo off" Cmd = "Copy " & Left(Cmd, Len(Cmd) - 1) & " " & Rep & "Text.txt /B" ts.WriteLine Cmd ts.Close Set ts = Nothing Set Wsh = CreateObject("Wscript.Shell") wsh.Run Rep & "cp.bat", 0, True Set wsh = Nothing Kill Rep & "cp.bat" End If Set Fld = Nothing Set Fso = Nothing End Sub
PS : il y a un forum dédié au scripting (vbs, bat, etc ...) microsoft.public.fr.scripting
-- Cordialement,
Jacques.
Bonjour Yannick Bernollin
Yannick Bernollin a écrit :
Bonjour,
Voici mon problème:
- J'ai une liste de fichiers texte de structure identique que je voudrais
copier dans un seul fichier texte.
copier tous ces fichiers (le nombre total de fichiers est aléatoire) dans
folder1text.txt
Comment réaliser cela en vbscript?
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma
connaissance, d'avoir plusieurs sources et une seule destination,
mais la commande COPY le permettant
(COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Sub CopyFiles()
Dim Fso, Fld, fi, ts, Rep, Cmd
Dim Wsh
Rep = "C:Folder1"
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Fld = Fso.GetFolder(Rep)
For Each fi In Fld.Files
If UCase(Left(fi.Name, 4)) = "TEXT" _
And UCase(Right(fi.Name, 3)) = "TXT" Then
Cmd = Cmd & Rep & "" & fi.Name & "+"
End If
Next
If Len(Cmd) > 0 Then
On Error Resume Next
Kill Rep & "Text.txt"
On Error GoTo 0
Set ts = Fso.CreateTextFile(Rep & "cp.bat", True)
ts.WriteLine "@Echo off"
Cmd = "Copy " & Left(Cmd, Len(Cmd) - 1) & " " & Rep & "Text.txt /B"
ts.WriteLine Cmd
ts.Close
Set ts = Nothing
Set Wsh = CreateObject("Wscript.Shell")
wsh.Run Rep & "cp.bat", 0, True
Set wsh = Nothing
Kill Rep & "cp.bat"
End If
Set Fld = Nothing
Set Fso = Nothing
End Sub
PS : il y a un forum dédié au scripting (vbs, bat, etc ...)
microsoft.public.fr.scripting
copier tous ces fichiers (le nombre total de fichiers est aléatoire) dans folder1text.txt
Comment réaliser cela en vbscript?
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma connaissance, d'avoir plusieurs sources et une seule destination, mais la commande COPY le permettant (COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Sub CopyFiles() Dim Fso, Fld, fi, ts, Rep, Cmd Dim Wsh
Rep = "C:Folder1" Set Fso = CreateObject("Scripting.FileSystemObject") Set Fld = Fso.GetFolder(Rep)
For Each fi In Fld.Files If UCase(Left(fi.Name, 4)) = "TEXT" _ And UCase(Right(fi.Name, 3)) = "TXT" Then Cmd = Cmd & Rep & "" & fi.Name & "+" End If Next
If Len(Cmd) > 0 Then On Error Resume Next Kill Rep & "Text.txt" On Error GoTo 0 Set ts = Fso.CreateTextFile(Rep & "cp.bat", True) ts.WriteLine "@Echo off" Cmd = "Copy " & Left(Cmd, Len(Cmd) - 1) & " " & Rep & "Text.txt /B" ts.WriteLine Cmd ts.Close Set ts = Nothing Set Wsh = CreateObject("Wscript.Shell") wsh.Run Rep & "cp.bat", 0, True Set wsh = Nothing Kill Rep & "cp.bat" End If Set Fld = Nothing Set Fso = Nothing End Sub
PS : il y a un forum dédié au scripting (vbs, bat, etc ...) microsoft.public.fr.scripting
-- Cordialement,
Jacques.
Yannick Bernollin
OK MErci Je vais tester
"Jacques93" a écrit dans le message de news:
Bonjour Yannick Bernollin Yannick Bernollin a écrit :
Bonjour,
Voici mon problème: - J'ai une liste de fichiers texte de structure identique que je voudrais copier dans un seul fichier texte.
copier tous ces fichiers (le nombre total de fichiers est aléatoire) dans folder1text.txt
Comment réaliser cela en vbscript?
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma connaissance, d'avoir plusieurs sources et une seule destination, mais la commande COPY le permettant (COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Sub CopyFiles() Dim Fso, Fld, fi, ts, Rep, Cmd Dim Wsh
Rep = "C:Folder1" Set Fso = CreateObject("Scripting.FileSystemObject") Set Fld = Fso.GetFolder(Rep)
For Each fi In Fld.Files If UCase(Left(fi.Name, 4)) = "TEXT" _ And UCase(Right(fi.Name, 3)) = "TXT" Then Cmd = Cmd & Rep & "" & fi.Name & "+" End If Next
If Len(Cmd) > 0 Then On Error Resume Next Kill Rep & "Text.txt" On Error GoTo 0 Set ts = Fso.CreateTextFile(Rep & "cp.bat", True) ts.WriteLine "@Echo off" Cmd = "Copy " & Left(Cmd, Len(Cmd) - 1) & " " & Rep & "Text.txt /B" ts.WriteLine Cmd ts.Close Set ts = Nothing Set Wsh = CreateObject("Wscript.Shell") wsh.Run Rep & "cp.bat", 0, True Set wsh = Nothing Kill Rep & "cp.bat" End If Set Fld = Nothing Set Fso = Nothing End Sub
PS : il y a un forum dédié au scripting (vbs, bat, etc ...) microsoft.public.fr.scripting
-- Cordialement,
Jacques.
OK MErci
Je vais tester
"Jacques93" <jacques@Nospam> a écrit dans le message de news:
O6lh16MWGHA.3496@TK2MSFTNGP05.phx.gbl...
Bonjour Yannick Bernollin
Yannick Bernollin a écrit :
Bonjour,
Voici mon problème:
- J'ai une liste de fichiers texte de structure identique que je
voudrais copier dans un seul fichier texte.
copier tous ces fichiers (le nombre total de fichiers est aléatoire) dans
folder1text.txt
Comment réaliser cela en vbscript?
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma
connaissance, d'avoir plusieurs sources et une seule destination,
mais la commande COPY le permettant
(COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Sub CopyFiles()
Dim Fso, Fld, fi, ts, Rep, Cmd
Dim Wsh
Rep = "C:Folder1"
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Fld = Fso.GetFolder(Rep)
For Each fi In Fld.Files
If UCase(Left(fi.Name, 4)) = "TEXT" _
And UCase(Right(fi.Name, 3)) = "TXT" Then
Cmd = Cmd & Rep & "" & fi.Name & "+"
End If
Next
If Len(Cmd) > 0 Then
On Error Resume Next
Kill Rep & "Text.txt"
On Error GoTo 0
Set ts = Fso.CreateTextFile(Rep & "cp.bat", True)
ts.WriteLine "@Echo off"
Cmd = "Copy " & Left(Cmd, Len(Cmd) - 1) & " " & Rep & "Text.txt /B"
ts.WriteLine Cmd
ts.Close
Set ts = Nothing
Set Wsh = CreateObject("Wscript.Shell")
wsh.Run Rep & "cp.bat", 0, True
Set wsh = Nothing
Kill Rep & "cp.bat"
End If
Set Fld = Nothing
Set Fso = Nothing
End Sub
PS : il y a un forum dédié au scripting (vbs, bat, etc ...)
microsoft.public.fr.scripting
copier tous ces fichiers (le nombre total de fichiers est aléatoire) dans folder1text.txt
Comment réaliser cela en vbscript?
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma connaissance, d'avoir plusieurs sources et une seule destination, mais la commande COPY le permettant (COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Sub CopyFiles() Dim Fso, Fld, fi, ts, Rep, Cmd Dim Wsh
Rep = "C:Folder1" Set Fso = CreateObject("Scripting.FileSystemObject") Set Fld = Fso.GetFolder(Rep)
For Each fi In Fld.Files If UCase(Left(fi.Name, 4)) = "TEXT" _ And UCase(Right(fi.Name, 3)) = "TXT" Then Cmd = Cmd & Rep & "" & fi.Name & "+" End If Next
If Len(Cmd) > 0 Then On Error Resume Next Kill Rep & "Text.txt" On Error GoTo 0 Set ts = Fso.CreateTextFile(Rep & "cp.bat", True) ts.WriteLine "@Echo off" Cmd = "Copy " & Left(Cmd, Len(Cmd) - 1) & " " & Rep & "Text.txt /B" ts.WriteLine Cmd ts.Close Set ts = Nothing Set Wsh = CreateObject("Wscript.Shell") wsh.Run Rep & "cp.bat", 0, True Set wsh = Nothing Kill Rep & "cp.bat" End If Set Fld = Nothing Set Fso = Nothing End Sub
PS : il y a un forum dédié au scripting (vbs, bat, etc ...) microsoft.public.fr.scripting
-- Cordialement,
Jacques.
Gloops
Jacques93 a écrit :
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma connaissance, d'avoir plusieurs sources et une seule destination, mais la commande COPY le permettant (COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Bonjour,
A propos de cette syntaxe, on peut noter au passage qu'elle peut servir à modifier les date et heure du fichier, pour les mettre aux date et heure du système.
On procède ainsi (en ligne de commandes) : COPY TEST.TXT+,,
Le fichier Test.Txt conserve son contenu et est réputé avoir été modifié à l'heure de la commande.
Toutefois, se méfier de cette possibilité dans le cas d'un fichier binaire.
Même si ça n'a qu'un rapport lointain avec la question, ça m'a paru intéressant de le signaler.
Pour revenir à la question de mettre plusieurs fichiers les uns à la suite des autres, je pense que ce que dit Jacques devrait faire l'affaire, mais je pense aussi à une procédure écrite par ng pour fractionner un fichier en plusieurs, il me semble qu'un algorithme proche pourrait faire l'inverse.
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma
connaissance, d'avoir plusieurs sources et une seule destination,
mais la commande COPY le permettant
(COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Bonjour,
A propos de cette syntaxe, on peut noter au passage qu'elle peut servir
à modifier les date et heure du fichier, pour les mettre aux date et
heure du système.
On procède ainsi (en ligne de commandes) :
COPY TEST.TXT+,,
Le fichier Test.Txt conserve son contenu et est réputé avoir été modifié
à l'heure de la commande.
Toutefois, se méfier de cette possibilité dans le cas d'un fichier binaire.
Même si ça n'a qu'un rapport lointain avec la question, ça m'a paru
intéressant de le signaler.
Pour revenir à la question de mettre plusieurs fichiers les uns à la
suite des autres, je pense que ce que dit Jacques devrait faire
l'affaire, mais je pense aussi à une procédure écrite par ng pour
fractionner un fichier en plusieurs, il me semble qu'un algorithme
proche pourrait faire l'inverse.
La méthode FileCopy du FileSystemOBject ne permettant pas, à ma connaissance, d'avoir plusieurs sources et une seule destination, mais la commande COPY le permettant (COPY Fic1+Fic2+Fic3 Fic), on peut faire un mix des deux.
Bonjour,
A propos de cette syntaxe, on peut noter au passage qu'elle peut servir à modifier les date et heure du fichier, pour les mettre aux date et heure du système.
On procède ainsi (en ligne de commandes) : COPY TEST.TXT+,,
Le fichier Test.Txt conserve son contenu et est réputé avoir été modifié à l'heure de la commande.
Toutefois, se méfier de cette possibilité dans le cas d'un fichier binaire.
Même si ça n'a qu'un rapport lointain avec la question, ça m'a paru intéressant de le signaler.
Pour revenir à la question de mettre plusieurs fichiers les uns à la suite des autres, je pense que ce que dit Jacques devrait faire l'affaire, mais je pense aussi à une procédure écrite par ng pour fractionner un fichier en plusieurs, il me semble qu'un algorithme proche pourrait faire l'inverse.
For Each fi In Fld.Files If UCase(Left(fi.Name, 4)) = "TEXT" _ And UCase(Right(fi.Name, 3)) = "TXT" Then Cmd = Cmd & Rep & "" & fi.Name & "+" End If Next
Salut Jacques,
A propos, il ne faut pas oublier de se méfier : - de la longueur de la ligne de commande - de la longueur du chemin
Toutefois si on met plusieurs chemins à la suite sur une ligne de commande, ça risque plus d'être la longueur de la ligne de commande qui pose problème. Si tous les fichiers sont dans le même répertoire, ça peut aider de le sélectionner avant la boucle (en utilisant ChDrive et ChDir), et de ne mentionner que le nom du fichier dans la ligne de commande.
Une chose à prendre en compte aussi en utilisant des lignes de commandes, c'est que les noms de fichiers, si ils comportent des espaces, doivent être soit encadrés par des guillemets, soit convertis en noms courts.
Si on utilise un nom court pour créer un nouveau fichier, peut-être pourra-t-on avoir envie de le renommer ensuite.
Jacques93 a écrit :
For Each fi In Fld.Files
If UCase(Left(fi.Name, 4)) = "TEXT" _
And UCase(Right(fi.Name, 3)) = "TXT" Then
Cmd = Cmd & Rep & "" & fi.Name & "+"
End If
Next
Salut Jacques,
A propos, il ne faut pas oublier de se méfier :
- de la longueur de la ligne de commande
- de la longueur du chemin
Toutefois si on met plusieurs chemins à la suite sur une ligne de
commande, ça risque plus d'être la longueur de la ligne de commande qui
pose problème. Si tous les fichiers sont dans le même répertoire, ça
peut aider de le sélectionner avant la boucle (en utilisant ChDrive et
ChDir), et de ne mentionner que le nom du fichier dans la ligne de commande.
Une chose à prendre en compte aussi en utilisant des lignes de
commandes, c'est que les noms de fichiers, si ils comportent des
espaces, doivent être soit encadrés par des guillemets, soit convertis
en noms courts.
Si on utilise un nom court pour créer un nouveau fichier, peut-être
pourra-t-on avoir envie de le renommer ensuite.
For Each fi In Fld.Files If UCase(Left(fi.Name, 4)) = "TEXT" _ And UCase(Right(fi.Name, 3)) = "TXT" Then Cmd = Cmd & Rep & "" & fi.Name & "+" End If Next
Salut Jacques,
A propos, il ne faut pas oublier de se méfier : - de la longueur de la ligne de commande - de la longueur du chemin
Toutefois si on met plusieurs chemins à la suite sur une ligne de commande, ça risque plus d'être la longueur de la ligne de commande qui pose problème. Si tous les fichiers sont dans le même répertoire, ça peut aider de le sélectionner avant la boucle (en utilisant ChDrive et ChDir), et de ne mentionner que le nom du fichier dans la ligne de commande.
Une chose à prendre en compte aussi en utilisant des lignes de commandes, c'est que les noms de fichiers, si ils comportent des espaces, doivent être soit encadrés par des guillemets, soit convertis en noms courts.
Si on utilise un nom court pour créer un nouveau fichier, peut-être pourra-t-on avoir envie de le renommer ensuite.
Jacques93
Bonjour Gloops, Gloops a écrit :
Jacques93 a écrit :
For Each fi In Fld.Files If UCase(Left(fi.Name, 4)) = "TEXT" _ And UCase(Right(fi.Name, 3)) = "TXT" Then Cmd = Cmd & Rep & "" & fi.Name & "+" End If Next
Salut Jacques,
A propos, il ne faut pas oublier de se méfier : - de la longueur de la ligne de commande - de la longueur du chemin
Toutefois si on met plusieurs chemins à la suite sur une ligne de commande, ça risque plus d'être la longueur de la ligne de commande qui pose problème. Si tous les fichiers sont dans le même répertoire, ça peut aider de le sélectionner avant la boucle (en utilisant ChDrive et ChDir), et de ne mentionner que le nom du fichier dans la ligne de commande.
Une chose à prendre en compte aussi en utilisant des lignes de commandes, c'est que les noms de fichiers, si ils comportent des espaces, doivent être soit encadrés par des guillemets, soit convertis en noms courts.
Tes remarques sont tout à fait justifiées. Je suis parti des données indiquées par Yannick Bernollin :
folder1text2.txt
etc ...
et n'ai indiqué qu'une des voies possibles. Tout est perfectible ;-)
HS : Sauf le CPE !!!
-- Cordialement,
Jacques.
Bonjour Gloops,
Gloops a écrit :
Jacques93 a écrit :
For Each fi In Fld.Files
If UCase(Left(fi.Name, 4)) = "TEXT" _
And UCase(Right(fi.Name, 3)) = "TXT" Then
Cmd = Cmd & Rep & "" & fi.Name & "+"
End If
Next
Salut Jacques,
A propos, il ne faut pas oublier de se méfier :
- de la longueur de la ligne de commande
- de la longueur du chemin
Toutefois si on met plusieurs chemins à la suite sur une ligne de
commande, ça risque plus d'être la longueur de la ligne de commande qui
pose problème. Si tous les fichiers sont dans le même répertoire, ça
peut aider de le sélectionner avant la boucle (en utilisant ChDrive et
ChDir), et de ne mentionner que le nom du fichier dans la ligne de
commande.
Une chose à prendre en compte aussi en utilisant des lignes de
commandes, c'est que les noms de fichiers, si ils comportent des
espaces, doivent être soit encadrés par des guillemets, soit convertis
en noms courts.
Tes remarques sont tout à fait justifiées. Je suis parti des données
indiquées par Yannick Bernollin :
folder1text2.txt
etc ...
et n'ai indiqué qu'une des voies possibles. Tout est perfectible ;-)
For Each fi In Fld.Files If UCase(Left(fi.Name, 4)) = "TEXT" _ And UCase(Right(fi.Name, 3)) = "TXT" Then Cmd = Cmd & Rep & "" & fi.Name & "+" End If Next
Salut Jacques,
A propos, il ne faut pas oublier de se méfier : - de la longueur de la ligne de commande - de la longueur du chemin
Toutefois si on met plusieurs chemins à la suite sur une ligne de commande, ça risque plus d'être la longueur de la ligne de commande qui pose problème. Si tous les fichiers sont dans le même répertoire, ça peut aider de le sélectionner avant la boucle (en utilisant ChDrive et ChDir), et de ne mentionner que le nom du fichier dans la ligne de commande.
Une chose à prendre en compte aussi en utilisant des lignes de commandes, c'est que les noms de fichiers, si ils comportent des espaces, doivent être soit encadrés par des guillemets, soit convertis en noms courts.
Tes remarques sont tout à fait justifiées. Je suis parti des données indiquées par Yannick Bernollin :
folder1text2.txt
etc ...
et n'ai indiqué qu'une des voies possibles. Tout est perfectible ;-)
HS : Sauf le CPE !!!
-- Cordialement,
Jacques.
Gloops
Jacques93 a écrit :
HS : Sauf le CPE !!!
:)
(en général les émoticônes sont jaunes ; donc, rien à ajouter)
Jacques93 a écrit :
HS : Sauf le CPE !!!
:)
(en général les émoticônes sont jaunes ; donc, rien à ajouter)