Je suis un débutant, alors supporte-moi ...
J'essaie de tout copier .doc
fichiers que j’ai dispersés dans plusieurs sous-répertoires d’un répertoire principal vers un autre répertoire à l’aide d’un fichier de traitement par lots. J'ai réussi à obtenir un filelist.txt
de tous les fichiers (il y en a des centaines) hors de ces répertoires que je veux copier en utilisant:
"C:\Main directory\sub directory" dir /b /s *.doc > "C:\Main directory\sub directory\filelist.txt"
Quel script utiliserais-je pour copier ceux-ci dans un seul répertoire? Puis-je utiliser du code qui récupère ces noms de fichiers de filelist.txt
et les xcopie?
Pour référence, j'ai regardé la question ci-dessous car il semblait que cela faisait ce que je voulais faire, mais ça n'a pas fonctionné pour moi.
tilisation de xcopy pour copier des fichiers de plusieurs répertoires dans un répertoire
De plus, j'aimerais vraiment comprendre ce concept, alors veuillez décomposer le code pour que je puisse me dire ce que fait chaque élément, ou au moins inclure un lien qui l'expliquera.
Dans une solution de fichier batch
for /R c:\source %%f in (*.xml) do copy %%f x:\destination\
Le code fonctionne comme tel;
pour chaque fichier for
dans le répertoire c:\source
et les sous-répertoires /R
correspondant au modèle (\*.xml)
, placez le nom du fichier dans la variable %%f
, puis pour chaque fichier do
copier le fichier copy %%f
vers la destination x:\\destination\\
Je viens juste de le tester ici sur mon ordinateur Windows XP) et cela a fonctionné comme une friandise pour moi. Mais je l'ai tapé dans Invite de commande et j'ai donc utilisé la version de nom de variable unique %f
, Comme décrit dans la question liée ci-dessus.
Il suffit d'utiliser la commande XCOPY avec l'option récursive
xcopy c:\*.doc k:\mybackup /sy
/ s le rendra "récursif"
Des choses comme celles-ci sont la raison pour laquelle je suis passé à Powershell. Essayez, c'est amusant:
Get-ChildItem -Recurse -Include *.doc | % {
Copy-Item $_.FullName -destination x:\destination
}
Brandon, court et doux. Aussi flexible.
set dSource=C:\Main directory\sub directory
set dTarget=D:\Documents
set fType=*.doc
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%"') do (
copy /V "%%f" "%dTarget%\" 2>nul
)
J'espère que cela t'aides.
J'ajouterais quelques vérifications après la copie (en utilisant '||'), mais je ne suis pas sûr de savoir comment "copy/v" réagit lorsqu'il rencontre une erreur.
vous voudrez peut-être essayer ceci:
copy /V "%%f" "%dTarget%\" 2>nul|| echo En error occured copying "%%F".&& exit /b 1
Comme la ligne de copie. laissez-moi savoir si vous en tirez quelque chose (pas en position de tester une copie d'échec atm ..)
vous pouvez aussi utiliser vbscript
Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "c:\test"
strDestination = "c:\tmp\"
Set objFolder = objFS.GetFolder(strFolder)
Go(objFolder)
Sub Go(objDIR)
If objDIR <> "\System Volume Information" Then
For Each eFolder in objDIR.SubFolders
Go eFolder
Next
For Each strFile In objDIR.Files
strFileName = strFile.Name
strExtension = objFS.GetExtensionName(strFile)
If strExtension = "doc" Then
objFS.CopyFile strFile , strDestination & strFileName
End If
Next
End If
End Sub
enregistrer sous mycopy.vbs et en ligne de commande
c:\test> cscript /nologo mycopy.vbs