fichier de commandes Copier des fichiers avec certaines extensions de plusieurs répertoires dans un seul répertoire

Je suis un débutant, alors supporte moi …

J’essaie de copier tous les fichiers .doc que j’ai dispersés dans plusieurs sous-répertoires d’un répertoire principal dans un autre répertoire en utilisant un fichier de commandes. J’ai réussi à obtenir un filelist.txt de tous les fichiers (il y en a des centaines) 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 utiliser pour les copier dans un seul répertoire? Puis-je utiliser un code qui saisit réellement ces noms de filelist.txt partir de filelist.txt et xcopies-les?

Pour référence, j’ai regardé la question ci-dessous parce que cela semblait faire ce que je voulais faire, mais cela n’a pas fonctionné pour moi.

Utiliser xcopy pour copier des fichiers de plusieurs répertoires vers un répertoire

Aussi, j’aimerais vraiment comprendre ce concept, alors veuillez décomposer le code pour me dire ce que chaque article fait, ou au moins inclure un lien qui l’expliquera.

Dans une solution de fichier batch

 for /R c:\source %%f in (*.xml) do copy %%fx:\destination\ 

Le code fonctionne comme tel;

pour chaque fichier for répertoire c:\source et des sous /R répertoires /R correspondant au modèle (\*.xml) placez le nom du fichier dans la variable %%f , puis pour chaque fichier do copiez le fichier copy %%f dans la destination x:\\destination\\

Je l’ai juste testé sur mon ordinateur Windows XP et cela a fonctionné comme un régal pour moi. Mais je l’ai tapé dans l’invite de commande, j’ai donc utilisé la seule version du nom de la variable %f , comme décrit dans la question liée ci-dessus.

Utilisez simplement la commande XCOPY avec l’option récursive

 xcopy c:\*.doc k:\mybackup /sy 

/ s le rendra “récursif”

Des choses comme celles-ci expliquent pourquoi je suis passé à Powershell. Essayez-le, 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 /ad /b /s "%dSource%\%fType%"') do ( copy /V "%%f" "%dTarget%\" 2>nul ) 

J’espère que cela t’aides.

J’appendais des vérifications après la copie (en utilisant ‘||’) mais je ne suis pas sûr de la manière dont “copy / v” réagit quand 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 obtenez quelque chose de lui (en aucun cas pour tester un atm de copie échec ..)

vous pouvez également 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 sur la ligne de commande

 c:\test> cscript /nologo mycopy.vbs