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 !!_Temp
Ordner ( 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 , %%A
was 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 exist
damit 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\"