CMD-Skript - Dateien mit Namenende _0001.png kopieren

CMD-Skript - Dateien mit Namenende _0001.png kopieren

Ich brauche Hilfe beim Schreiben eines Skripts in cmd

Ich befinde mich in einem Ordner der Unterordner darin hat, diese Unterordner musst du durchsuchen (nicht tiefer gehen) und Dateien deren Name mit "_0001.png" endet in den Ordner !!_TEMP kopieren (dieser Ordner liegt an der Stelle wo das Programm startet)

Kannst du mir helfen?

Das funktioniert nicht:

for /R "%folder%" %%G in (*_0001.png) do copy "%%G" "%folder%\!!_TEMP\"

Antwort1

pushd "%folder%"
for /D %%D in (*) do copy "%%D\*_0001.png" "!!_TEMP"
popd

Antwort2

CMD ist nicht meine Stärke, daher biete ich meine Powershell-Lösung an.

$content = Get-ChildItem .\Desktop\localtmp -Depth 1
foreach($file in $content){
    if($file.Name -like "*_0001.png"){
    $path = $file.DirectoryName + "\" + $file.Name
        Copy-Item $path -Destination .\Desktop\anotherlocaltmp
    }
}

Sie müssen nur Ihre Pfade hinzufügen

Ich hoffe es hilft!

Antwort3

Das sollte für Sie funktionieren:

@echo off

set "dir=C:\Your\Root\Folder"
set "tem=%dir%\!!_Temp"

for /d %%A in (*) do (
    for %%B in (%%A\*_0001.png) do (
        if not exist "%tem%\%%~nxB" copy /y "%%B" "%tem%\" 
    )
)

Um die Dinge übersichtlicher und einfacher zu ändern zu machen, legen wir zwei Variablen fest – eine für Ihren Stammordner ( dir) und eine für den !!_TempOrdner ( tem) innerhalb Ihres Stammordners. Basierend auf Ihrer Frage wird dabei auch davon ausgegangen, dass Sie die .bat-Datei vom Stammordner aus ausführen. Ist dies nicht der Fall, können wir den Pfad in der ersten For-Schleife bearbeiten.

Die erste Schleife hat for /d, die nur die Ordner der obersten Ebene in Ihrem aktuellen Verzeichnis durchsucht, und für jede Iteration der Schleife werden diese Ordner der obersten Ebene als Parameter festgelegt %%A. Die nächste Schleife durchsucht nur Dateien, die den von uns festgelegten Kriterien entsprechen – also alles in , %%Awas mit endet _0001.png– und legt jede davon als Parameter fest %%B. Der Befehl in dieser letzten Schleife lautet if not exist "%tem%\%%~nxB" copy /y "%%B" "%tem%\"– wir schließen das ein, if not existdamit es nicht für Dateien ausgeführt wird, die bereits nach kopiert wurden !!_Temp. Aufgrund Ihrer Frage bin ich mir nicht sicher, ob Sie jemals auf mehrere Dateien in mehreren Unterordnern stoßen würden, die genau denselben Namen haben, aber wenn dies ein möglicher Fall ist, können wir das umgehen.

Antwort4

Diese einzeilige For-Schleife sollte funktionieren. Sie hat die gleichen Variablen wie die, die Sie verwenden.

for /f "delims==" %%G in ('dir "%folder%\*_0001.png" /s /b') do copy "%%G" "%folder%\!!_TEMP\"

verwandte Informationen