Copie nombres de archivos con una cierta cantidad de caracteres en la línea de comando (CMD)

Copie nombres de archivos con una cierta cantidad de caracteres en la línea de comando (CMD)

Necesito copiar todos los archivos de texto en una carpeta cuyos nombres tengan cinco caracteres. Sé que este comando es para listar:

$ dir folder /B | findstr /R "^.....\.txt"

pero quiero copiar todos los archivos cuyos nombres aparecen en el comando anterior a una carpeta diferente.

Respuesta1

Estaba preguntando (no sólo a mí mismo)"¿No funciona de forma sencilla..."?

copy  C:\ORIG_DIR\?????.txt C:\Dest_Dir

Gracias a G-Man se prueba queenpotencia Shellfunciona, mientras tanto encmd.exeEl comando anterior copiará cada coincidencia hasta cinco caracteres y con todas las extensiones que comiencen con .txt.

Signo de interrogación (?)

Utilice el signo de interrogación como sustituto de un solo carácter en un nombre. Por ejemplo, si escribe gloss?.doc, localizará el archivo Glossy.doc o Gloss1.doc pero no Glossary.doc.

Referencia:

Respuesta2

Esto es posible en Batch pero es fácil en PowerShell.

ls | foreach { if (($_.BaseName.Length -eq 5) -and ($_.Extension -eq ".txt")) 
    { $_.CopyTo("\Name\Of\Target\Folder\" + $_.Name) }

También puede hacerlo comparando los nombres de los archivos con una expresión regular, pero este método funciona bien.

Respuesta3

En Batch podrías hacer algo como esto:

@Echo OFF

Set "targetDir=C:\Dir"

For %%# In ("*.txt") DO (

    (Echo "%%~nx#" | findstr /R "^......\.")1>Nul 2>&1 && (

        Echo Copying "%%~nx#" ...
        (Copy /Y "%%~f#" "%targetDir%\%%~nx#")1>NUL

    )
)

Pause&Exit /B 0

Respuesta4

Aquí hay otro enfoque por lotes:

@eco apagado
setlocal enablelayedexpansion
para %%f en (*.txt) haga (
      establecer foo=%%f
      establecer foo=!foo:~5,5!
      si !foo!==.txt (
            (Este nombre de archivo (%%F) coincide con el patrón?????.TXT; haz lo que quieras con él).
      )
)

Es !foo:~5,5!una instancia del mecanismo de subcadena; extrae la subcadena del nombre del archivo comenzando en el sexto carácter (desplazamiento 5) y con una longitud de 5 (suficiente para capturar más un carácter más, si hay más). Entonces, la variable tiene el valor si los caracteres 6, 7, 8 y 9 del nombre de archivo son ,, y , y no hay un décimo carácter .!variable:~offset:length!.txtfoo.txt.txt

información relacionada