Soy nuevo en la programación de archivos por lotes y estoy analizando un archivo por lotes existente, que fue implementado por un antiguo desarrollador de nuestra empresa. Así que estoy tratando de descubrir qué pretendía hacer. Tengo el siguiente comando:
for /r %x in (\\Server6\doc_production\*38316468*) do ren "%x" /y \\Server6\doc_production\error\
Sé que este es un comando de bucle que debería recorrer de forma recursiva la ruta indicada. Pero hay algunas partes que me son desconocidas:
¿Para qué sirve el parámetro /y? No pude encontrar nada buscando en Google.
¿Qué hace exactamente este comando?
ACTUALIZAR: Gracias por la respuesta. Muchos dijeron que este comando movería archivos que coincidan con el patrón a la subcarpeta de error. Entonces intenté probarlo en mi máquina local. Creé el siguiente directorio:
C:
├──test
│ └──error
Y he insertado un archivo 38316468.sql en la carpeta de prueba.
Luego he ejecutado el comando:
for /r %x in (C:\doc_production\*38316468*) do ren "%x" /y C:\doc_production\error\
Pero nada pasa. El comando se ejecuta sin ningún mensaje de error. Sin errores de sintaxis. Pero no hace nada. No mueve el archivo, no cambia el nombre del archivo. ¿Por qué es así?
Respuesta1
Eso no me parece válido.
RENAME (REN) no tiene un parámetro /y y requiere que el segundo parámetro sea un nombre de archivo (no una carpeta como aquí).
MOVE tiene "/y", lo que significa "no me molestes con preguntas de "¿estás seguro" cuando el objetivo ya existe y asume que respondí "Sí"?" y está bien con una carpeta como segundo parámetro.
Pero en el caso de MOVE, /Y debería aparecer directamente después del comando MOVE y antes de los parámetros. Si reemplaza REN con MOVE, sigue siendo un error de sintaxis.
De todos modos: el comando FOR crea una lista de todos los archivos (buscará en los subdirectorios) que coincidan con el patrón38316468y luego llama al REN para cada partido por turno. El REN (debería ser MOVE) intenta cambiar el nombre (mover) cada archivo a la carpeta de error.
Pero el uso de /Y sigue siendo incorrecto para MOVE.
Otro problema que genera error es una subcarpeta de la carpeta de origen en la que está operando FOR. Esto hará que el comando intente mover archivos sobre sí mismo. (Por ejemplo, de una carpeta de errores a otra). Esto puede ser un problema o no dependiendo de si la carpeta de errores se borra más tarde antes de volver a utilizar el comando FOR.
Por último, pero no menos importante: algunas palabras de precaución:
el uso de las variables %X en un archivo por lotes requiere duplicar el % a %%X. En la línea de comando puedes usar un solo %. Y las variables %X distinguen entre mayúsculas y minúsculas, por lo que %X y %x no son lo mismo.
Respuesta2
Analicémoslo para que puedas saber qué está haciendo.
for /r %x
Este comando recorre el árbol de carpetas comenzando en \\Server6\doc_production\*38316468*
la ruta y ejecuta la instrucción DO en cada archivo coincidente.
En su comando, la DO
acción o es ren
para cambiar el nombre.
Esto /y
evita que el símbolo del sistema le pregunte sobre la sobrescritura de archivos del origen que ya existen en el destino.
Parece como si estuviera buscando un número comodín en el primer directorio y le cambiará el nombre y lo grabará en la carpeta /error/, pero no hay ningún nombre de archivo para que funcione. Se deberá especificar un nombre de archivo después de la carpeta /error/ para que este comando funcione correctamente.