Cercare di copiare solo file con un nome di tre caratteri, ma questo sta copiando qualcosa di più piccolo


1

Sto usando 'copia' in una finestra della console in Windows XP Pro (quindi sto usando sostanzialmente i comandi DOS)

Ho file con tre caratteri più un'estensione e file con due caratteri più un'estensione. Ho il seguente in un file batch ms-dos ...

copy ???.gif n:\inetpub\wwwroot\images

che per quanto riguarda la mia comprensione dei caratteri jolly windows / dos dovrebbe copiare SOLO quei file che hanno tre caratteri nel loro nome. Ma sta copiando anche i file con due caratteri.

La mia comprensione deve quindi essere errata, quindi esiste un altro modo in un file batch ms-dos per limitare una copia ai soli file con un numero specifico di caratteri nel loro nome?

Risposte:


2

Per selezionare solo i file desiderati è necessario coinvolgere le espressioni regolari. Un modo per farlo è usare il comando findstr. ( http://ss64.com/nt/findstr.html )

Per mettere insieme i comandi di output sembra un po 'brutto ma il formato di base è il seguente:

for /f "delims=" %a in ('dir /b ^| findstr "\<[a-z][a-z][a-z].gif"') do copy %a n:\inetpub\wwwroot\images

Per spiegare un po ':

for /f "delims=" %a in

Questa è la configurazione in modo che ogni pezzo di output del comando in '()' venga inserito in% a

('dir /b ^| findstr "\<[a-z][a-z][a-z].gif"')

Questo comando usa dir / b per ottenere un elenco dei file nella directory corrente e lo passa a findstr. findstr cerca le linee di input che corrispondono al seguente modello: Contengono una parola che inizia (\ <) con tre lettere ([az] [az] [az]) seguite da .gif (.txt).

do copy %a n:\inetpub\wwwroot\images

Questo copia il file il cui nome è in% a.


1

il ?mezzo di un carattere o una NULLalla fine del nome.

Quindi BA ??. TXT corrisponderà a BARR.TXT e BAR.TXT. Dal momento che stai usando 3 ?, abbinerà anche 2 caratteri e 1 carattere ...

In Windows Vista c'è un comando da copiare chiamato robocopye ha la possibilità di escludere alcuni file. Puoi provare:

robocopy ???.txt c:\temp\ /xf??.TXT

ma non sono sicuro che funzionerà in Windows XP


? ha persino funzionato nel giusto DOS. Mi puoi spiegare /xf??.TXT?
barlop

0

Puoi farlo in questo modo:

@echo off
setlocal EnableDelayedExpansion
for %%f in (???.gif) do (
    set filename=%%f
    set fourthchar=!filename:~3,1!
    if !fourthchar! == . copy %%f n:\inetpub\wwwroot\images
)

Cioè, copia i file che hanno tre caratteri solo prima del punto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.