Secuencia de comandos por lotes de Windows: selección de un elemento de una lista de resultados de búsqueda


1

Objetivo: me gustaría buscar un tipo específico de archivos en una sola carpeta. Filtrado por un patrón de nombre de archivo específico (por ejemplo, "archivo") y también ordenado por nombre de archivo, el resultado se vería así:

file101.txt
file212.txt
file432.txt

Ahora, me gustaría seleccionar solo el último elemento (aquí: file432.txt ) y realizar operaciones adicionales (por ejemplo, copiar y renombrar) en ese archivo.

¿Como podría hacerlo?

Lo que tengo hasta ahora es el siguiente:

@echo off
setlocal
set list=
for /r . %%g in (file*.txt) do echo %%g

.. que me da la lista presentada en la parte superior de mi pregunta.

Por lo que yo entiendo, no hay una lista real, es solo una cadena con caracteres de retorno / nueva línea. En consecuencia, realmente no puedo seleccionar un elemento de resultado de búsqueda específico. Habría usado otro for bucle pero no sé exactamente para qué patrón filtraría a excepción de EOF. La única idea que tengo es eliminar todos los caracteres de nueva línea y guardar el resultado en una variable. Ahora, cada nueva línea que se encuentre sobreescribirá la anterior.

¿Cómo haría esto?

set lastitem=for %%g in (%list%) do REMOVE_NEWLINE and echo %%g

Otra pregunta, solución similar si modificas /O interruptor de dir mando. Leer dir /? para los posibles valores de orden de clasificación.
JosefZ

Jim, espero que te des cuenta de que el /R La opción se usa para ir a las subcarpetas. Por lo tanto, la respuesta que aceptó no funcionará si necesita hacerlo ya que los archivos se ordenan por cada carpeta a la que se accede durante la ejecución. Todo se genera alfanuméricamente según la carpeta y el nombre del archivo. Este código también funciona solo si todos los archivos tienen la misma estructura de nombre de archivo. Si alguno de los nombres de sus archivos tiene más o menos caracteres numéricos, puede o no obtener el nombre del archivo que es el número numérico más grande.
Squashman

@Squashman, no estaba al tanto de ese detalle, sin embargo funcionó (por lo tanto aceptó la respuesta) como se esperaba debido a las limitaciones muy específicas que de hecho describió usted. Siéntase libre de modificar la pregunta en consecuencia para abordar mejor este asunto.
Jim McAdams

Respuestas:


1

Me gustaría seleccionar solo el último artículo

(aquí: archivo432.txt) y realice operaciones adicionales (por ejemplo, copiar y renombrar) en ese archivo.

Utilice el siguiente archivo por lotes.

test.cmd:

@echo off 
setlocal
for /r . %%g in (file*.txt) do (
  set _lastitem=%%g
  )
echo do something to the last file in the list, which is %_lastitem%
endlocal

salida de ejemplo:

F:\test>dir file*.txt
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

22/08/2016  18:17                 0 file101.txt
22/08/2016  18:17                 0 file212.txt
22/08/2016  18:17                 0 file432.txt
               3 File(s)              0 bytes
               0 Dir(s)  1,765,302,566,912 bytes free

F:\test>test
do something to the last file in the list, which is F:\test\file432.txt

F:\test>

Trabajado como un encanto. Lo único que me gustaría mejorar es usar comillas: "% _lastitem%". De esta manera, las rutas de directorio con espacios no darán problemas. :RE
Jim McAdams
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.