Das NTFS-Dateisystem (New Technology File System) gibt eine Liste von Dateinamen zurück, die mit einem Platzhaltermuster übereinstimmen und immer in alphabetischer Reihenfolge sortiert sind. Bei NTFS-formatierten Partitionen reicht der folgende Batch-Code möglicherweise für diese Aufgabe aus.
@echo off
for /D %%D in ("C:\pdf\*") do if exist "%%D\*.pdf" call :CopyFirstFile "%%D"
goto :EOF
:CopyFirstFile
for %%F in ("%~1\*.pdf") do (
copy "%%F" C:\qa\
goto :EOF
)
goto :EOF
Bitte beachten Sie, dass erste FÜR Unterordner ignoriert mit Hidden-Attribut gesetzt. Und die zweite FOR in Subroutine CopyFirstFile
ignoriert PDF-Dateien mit versteckten Attributsatz.
Eine andere Lösung auch für File Allocation Table Arbeits (FAT) Partitionen (FAT16, FAT32, exFAT) verwendet der Befehl DIR die Liste der * .pdf-Dateien nach Namen sortiert zu bekommen.
@echo off
for /D %%D in ("C:\pdf\*") do if exist "%%D\*.pdf" call :CopyFirstFile "%%D"
goto :EOF
:CopyFirstFile
for /F "delims=" %%F in ('dir /A-D /B /ON "%~1\*.pdf"') do (
copy "%~1\%%F" C:\qa\
goto :EOF
)
goto :EOF
Der Befehl DIR ignoriert Verzeichnisse das Muster * .pdf passend und findet auch wegen der Option /A-D
* .pdf-Dateien versteckt. Aber COPY kopiert keine versteckte * .pdf Datei!
Es vielleicht besser wäre, MOVE statt COPY als nächste zu verwenden, um die Batchdatei ausführen würde kopieren wieder die gleichen Dateien, wenn die Ordner in C:\pdf
sind in der Zwischenzeit nicht geändert.
Die Befehlszeilen unter dem Label CopyFirstFile
werden als Unterroutine interpretiert, die vom ersten FOR Loop aufgerufen wird.
Die erste goto :EOF
Ausfahrten Batch-Datei Verarbeitung, sobald die erste FÜR Schleife Iterieren über alle nicht versteckt Verzeichnisse von C:\pdf
beendet.
Die zweite goto :EOF
tritt aus dem zweiten FOR-Schleife und das Unterprogramm, nachdem die erste Datei in dem ersten als bestanden Verzeichnis kopiert (und einzige) Argument an die Subroutine.
Die dritte goto :EOF
wäre nicht wirklich notwendig, da diese Kommandozeile nie ausgeführt werden sollte und zusätzlich auch nicht benötigt wird, wenn in der Batchdatei keine Kommandozeilen mehr vorhanden sind. Es ist jedoch eine gute Übung, sicherzustellen, dass jeder Block, der als Unterprogramm aufgerufen wird, als letzte Zeile goto :EOF
oder alternativ exit /B
hat, was genau dasselbe ist wie goto :EOF
.
Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.
call /?
copy /?
dir /?
echo /?
for /?
goto /?
if /?
Wir würden uns freuen zu helfen, wenn Sie eine Batch-Datei erstellt haben, versuchte es und postete es hier mit einer Erklärung, wo Sie damit kämpfen. – Compo
Compo, danke für den Kommentar. Ich kämpfe, da ich leider nicht für einen Lebensunterhalt programmiere. Mein Wissen über Batch-Dateien beschränkt sich darauf, eine bestimmte Datei für a nach b umzubenennen und zu kopieren, aber keine Schleifen oder ähnliches zu verwenden. Entschuldigung, ich kann nicht die Grundlagen liefern! – Brad
Das ist kein gültiger Code, bitte auch ** editiere ** deinen ursprünglichen Beitrag mit deinem Code. – Compo