Corregir bat o archivo por lotes

Tengo este código que se supone que hace lo siguiente

Busca todos los archivos de extensión .doc o docx en el código se coloca .doc* para abreviar. Luego busca entre estos archivos cuales contienen en su nombre las magodeoz patriciatapia punk ramones y los copia a %cd%biblioteca.

Pero tiene un error

@Echo OFF
Set "RegEx=magodeoz patriciatapia punk ramones"
For /f "tokens=*" %%# in (
 'Dir /B /S "%SYSTEMDRIVE%\*.doc" ^| FINDSTR "%RegEx%"'
) DO (
 Echo: "%%#"
 REM Copy "%%#" %cd%biblioteca
)
Pause&Exit

1 respuesta

Respuesta
1

He probado tu código y, salvo un par de "erratas" (*.doc en lugar de *.doc* y %cd%bibliioteca en lugar de %cd%\biblioteca) creo que funciona correctamente. Y eso que me ha sorprendido que pongas

Set "RegEx=magodeoz patriciatapia punk ramones"

en vez de

Set RegEx="magodeoz patriciatapia punk ramones"

Pero parece funcionar indistintamente.

También supongo que sabes que FINDSTR distingue mayúsculas y minúsculas.

De modo que no sé cuál puede ser el error del que hablas.

Ya me dirás.

creo que el error era el REM y el * pero el \ no es un error porque el %cd% coloca la letra de la unidad mas el \

pero lo que veo es que debo cambiar el FINDSTR pues los archivos tienen mayúsculas en el nombre.

@Echo On
Set "RegEx=magodeoz patriciatapia punk ramones"
For /f "tokens=*" %%# in (
 'Dir /B /S "%SYSTEMDRIVE%\*.doc*" ^| FINDSTR "%RegEx%"'
) DO (
 Echo: "%%#"
 Copy "%%#" %cd%biblioteca
)
Pause&Exit

así va hasta el momento funciona bien excepto por las mayusculas

con FINDSTR /I se corige el problema de las mayúsculas y las minúsculas veo que tiene otro problema, pues cuando existen documentos con el mismo nombre copia el primero pero el segundo no lo copia crea un acceso directo en lugar de la copia

No sé muy bien lo que pasa con la variable %cd% (imagino que significa "current directory"). No he conseguido documentación de la misma y no aparece entre las variables de entorno que se obtienen con el comando SET en una ventana de CMD:

d:\bat>SET
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\GGG\Datos de programa
CommonProgramFiles=C:\Archivos de programa\Archivos comunes
COMPUTERNAME=25CIA
ComSpec=C:\WINDOWS\system32\cmd.exe
DEFLOGDIR=C:\Documents and Settings\All Users\Datos de programa\McAfee\DesktopPr
otection
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\GGG
LOGONSERVER=\\25CIA
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Archivos de programa\Calibre2\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 2 Stepping 7, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0207
ProgramFiles=C:\Archivos de programa
PROMPT=$P$G
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOCUME~1\GGG\CONFIG~1\Temp
TMP=C:\DOCUME~1\GGG\CONFIG~1\Temp
USERDOMAIN=25CIA
USERNAME=GGG
USERPROFILE=C:\Documents and Settings\GGG
VSEDEFLOGDIR=C:\Documents and Settings\All Users\Datos de programa\McAfee\Deskto
pProtection
windir=C:\WINDOWS

Sin embargo en mi caso esa variable no tiene la "\" como puedes ver:

d:\bat>echo %cd%
d:\bat

Pero bueno, esto es anecdótico.

Para que el copy copie siempre imagino que deberías ponerle el control "/y"

copy /y "%%#" %cd%biblioteca

con el "/y" sobre escribe los archivos copiados busco una forma de que si el archivo existe le agregue un numero algo así como si el archivo existe "magodeoz.dox"renombre el nuevo archivo por ej magodeoz_001.doc magodeoz_00.doc2 magodeoz_003.doc

gracias

@Echo On
Set "RegEx=magodeoz patriciatapia punk ramones"
For /f "tokens=*" %%# in (
 'Dir /B /S "%SYSTEMDRIVE%\*.doc*" ^| FINDSTR /I "%RegEx%"'
) DO (
 Echo: "%%#"
 Copy "%%#" %cd%biblioteca
)
Pause&Exit

Pues me temo que vas a tener que gestionar el renombrado, porque he buscado en la red a ver si hay alguna opción, utilizable desde un BAT, que lo haga automáticamente y no la he encontrado.

Habría que volver a usar el "if exist "%%#"... pero el nuevo nombre podría, a su vez, existir lo que puede hacer un poco difícil resolver el problema con carácter general.

No tengo muy claro que se podría hacer.

Si se te ocurre algo puedo intentar ayudarte a prepararlo.

Ya me dirás.

GGG

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas