Dateinamen mit einer bestimmten Anzahl von Zeichen in die Befehlszeile (CMD) kopieren

Dateinamen mit einer bestimmten Anzahl von Zeichen in die Befehlszeile (CMD) kopieren

Ich muss alle Textdateien in einem Ordner kopieren, deren Namen fünf Zeichen lang sind. Ich weiß, dass dieser Befehl zum Auflisten dient:

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

aber ich möchte alle Dateien, deren Namen durch den obigen Befehl aufgelistet werden, in einen anderen Ordner kopieren.

Antwort1

Ich habe gefragt (nicht nur mich selbst)„funktioniert das nicht ganz einfach …“?

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

Dank G-Man ist es getestet, dassInPower ShellEs klappt, Währenddessen incmd.exeDer obige Befehl kopiert jede Übereinstimmung mit bis zu fünf Zeichen und mit allen Erweiterungen, die mit beginnen .txt.

Fragezeichen (?)

Verwenden Sie das Fragezeichen als Ersatz für ein einzelnes Zeichen in einem Namen. Wenn Sie beispielsweise gloss?.doc eingeben, finden Sie die Datei Glossy.doc oder Gloss1.doc, aber nicht Glossary.doc.

Referenz:

Antwort2

Dies ist in Batch möglich, in PowerShell jedoch einfach.

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

Sie können dies auch tun, indem Sie die Dateinamen mit einem regulären Ausdruck vergleichen, aber diese Methode funktioniert einwandfrei.

Antwort3

Im Batchmodus könnten Sie etwa Folgendes tun:

@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

Antwort4

Hier ist ein weiterer Batch-Ansatz:

@echo aus
setlocal aktivierte verzögerte Erweiterung
für %%f in (*.txt) führen Sie (
      setze foo=%%f
      setze foo=!foo:~5,5!
      wenn !foo!==.txt (
            (Dieser Dateiname (%%F) entspricht dem Muster?????.txt; mach damit, was du willst.)
      )
)

Dies !foo:~5,5!ist eine Instanz des Teilstring-Mechanismus; er extrahiert den Teilstring des Dateinamens beginnend beim 6. Zeichen (Offset 5) und mit einer Länge von 5 (genug, um plus ein weiteres Zeichen zu erfassen, falls mehr vorhanden sind). Die Variable hat also den Wert , wenn das 6., 7., 8. und 9. Zeichen des Dateinamens , , , und sind und es kein 10. Zeichen gibt.!variable:~offset:length!.txtfoo.txt.txt

verwandte Informationen