Script por lotes para obtener el nombre del archivo de expresión coincidente en una carpeta

Script por lotes para obtener el nombre del archivo de expresión coincidente en una carpeta

Usando un script por lotes, voy dentro de la carpeta y en esa carpeta tengo diferentes archivos como:

ABc.txt
Pqr.png
.
.
Test-1.2.0.zip

De estos archivos, quiero obtener el nombre de un archivo que comienza con Testy tiene extensión .zip. En este caso, Test-1.2.0.zip. Ya que su versión podría ser dinámica.

¿Podría ayudarme con el script por lotes para buscar Test-1.2.0.zipy devolver como resultado?

Respuesta1

Al hacer clic derecho en el logotipo de Windows en la barra de inicio, elija "ejecutar" de la lista y ábralo. Luego escriba esta palabra "reciente" y haga clic en Aceptar. Se abrirá una carpeta reciente en su computadora portátil. Intente buscar en ella su archivo.

Respuesta2

Intente usar un For /Fbucle con:

where .:Strings/Characters+Wildcard+String/Characters

El wherecomando asume "."un carácter literal, no una expresión regular de 1 dígito/carácter:

1 Digit/character          <==>  ? 
1 or More Digit/Character  <==>  *
Test-  1 Digit/Character . 1 Digit/Character . 1 Digit/Character.zip        <==> Test-?.?.?.zip
Test-  1 Digit/Character . 1 Digit/Character . 1 or More Digit/Character:   <==> Test-?.?.*.zip
  • Usar For /Fcon (%%~nxinorteame yXTensión)
@echo off 

for /f useback^tokens^=* %%i in (`where .:"Test-?.?.?.zip"`)do echo\%%~nxi
  • Para Powershell:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.?.zip'} | Select-Object -ExpandProperty Name


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.?.zip'} |select -Exp Name
  • Resultados:
Test-1.2.0.zip
Test-1.2.1.zip
Test-1.2.2.zip
Test-1.2.3.zip
Test-1.2.4.zip
Test-1.2.5.zip
Test-1.2.6.zip
Test-1.2.7.zip
Test-1.2.8.zip
Test-1.2.9.zip
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"`)do echo\%%~nxi
  • Para Powershell:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.*.zip'} | Select-Object -ExpandProperty Name


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.*.zip'} |select -Exp Name
  • Resultados:
Test-1.2.0.zip
Test-1.2.1.zip
Test-1.2.10.zip
Test-1.2.11.zip
Test-1.2.12.zip
Test-1.2.13.zip
Test-1.2.14.zip
Test-1.2.15.zip
Test-1.2.16.zip
Test-1.2.17.zip
Test-1.2.18.zip
Test-1.2.19.zip
Test-1.2.2.zip
Test-1.2.20.zip
Test-1.2.3.zip
Test-1.2.4.zip
Test-1.2.5.zip
Test-1.2.6.zip
Test-1.2.7.zip
Test-1.2.8.zip
Test-1.2.9.zip

  • ParaReversoClasificarusar en código cmd/bat, para PowerShell agregarfor ... ^| Sort /r`) do ...| Sort-Object -Descending
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"^|sort /r`)do echo\%%~nxi
  • Para Powershell:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.*.zip'} | Select-Object -ExpandProperty Name | Sort-Object -Descending


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.*.zip'} |select -Exp Name | Sort -Des
  • Resultados:
Test-1.2.9.zip
Test-1.2.8.zip
Test-1.2.7.zip
Test-1.2.6.zip
Test-1.2.5.zip
Test-1.2.4.zip
Test-1.2.3.zip
Test-1.2.20.zip
Test-1.2.2.zip
Test-1.2.19.zip
Test-1.2.18.zip
Test-1.2.17.zip
Test-1.2.16.zip
Test-1.2.15.zip
Test-1.2.14.zip
Test-1.2.13.zip
Test-1.2.12.zip
Test-1.2.11.zip
Test-1.2.10.zip
Test-1.2.1.zip
Test-1.2.0.zip


Respuesta3

@echo off

for /f useback^tokens^=* %%i in (`where .:"temp-?.?.*.tar.gz"`)do echo\%%~nxi

esta solución funcionó para mí en un script por lotes

?representa 1 dígito/carácter yestrella(*)char representa 1 o más dígitos/carácter

información relacionada