archivo por lotes Copie archivos con ciertas extensiones de múltiples directorios en un directorio

Soy un novato, así que tengan paciencia conmigo …

Intento copiar todos los archivos .doc que he distribuido en varios subdirectorios de un directorio principal en otro directorio utilizando un archivo por lotes. filelist.txt obtener un filelist.txt de todos los archivos (hay cientos) fuera de estos directorios que quiero copiar usando:

"C:\Main directory\sub directory" dir /b /s *.doc > "C:\Main directory\sub directory\filelist.txt"

¿Qué script usaría para copiarlos en un directorio? ¿Puedo usar algún código que realmente filelist.txt esos nombres de archivo de filelist.txt y los copie?

Como referencia, miré la pregunta a continuación porque parecía que estaba haciendo lo que quería hacer, pero no funcionó para mí.

Usando xcopy para copiar archivos de varios directorios a un directorio

Además, realmente me gustaría entender este concepto, así que desglose el código para que me diga qué hace cada elemento, o al menos incluya un enlace que lo explique.

En una solución de archivo por lotes

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

El código funciona como tal;

para cada archivo en el directorio c:\source y subdirectories /R que coincidan con el patrón (\*.xml) ponga el nombre del archivo en la variable %%f , luego para cada archivo do copie el archivo copy %%f al destino x:\\destination\\

Acabo de probarlo aquí en mi computadora con Windows XP y funcionó como un regalo para mí. Pero lo escribí en el símbolo del sistema, así que usé la única versión del nombre de la variable %f , como se describe en la pregunta vinculada más arriba.

Simplemente use el comando XCOPY con la opción recursiva

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

/ s lo hará “recursivo”

Cosas como estas son las razones por las que cambié a Powershell. Pruébalo, es divertido:

 Get-ChildItem -Recurse -Include *.doc | % { Copy-Item $_.FullName -destination x:\destination } 

Brandon, bajo y dulce. También 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 ) 

Espero que esto ayude.

Agregaría algunas verificaciones después de la copia (usando ‘||’) pero no estoy seguro de cómo reactjs “copy / v” cuando encuentra un error.

Es posible que desee probar esto:

 copy /V "%%f" "%dTarget%\" 2>nul|| echo En error occured copying "%%F".&& exit /b 1 

Como la línea de copia. Avísame si obtienes algo de él (en ninguna posición para probar un error de copia del cajero automático ..)

también puedes usar 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 

guardar como mycopy.vbs y en la línea de comandos

 c:\test> cscript /nologo mycopy.vbs