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:
comodinesdebajo de las ventanas.
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!
.txt
foo
.txt
.
t
x
t