2017-03-03 3 views
0

Ich habe Hunderte von Unterordnern aus einem c: \ pdf \ Ordner.Batch-Datei zum Kopieren der ersten PDF in mehreren Ordnern von c: pdf zu einzelnen Ordner c: qa

Ich möchte die erste PDF (sortiert nach Namen) in jedem Unterordner und kopieren sie in einen einzigen Ordner, sagen c: \ QA \ so kann ich die PDF für Fehler manuell überprüfen.

Kann jemand helfen? Bitte!

Ich habe dies so weit:

@echo off 
cls 
cd c: 
cd c:\pdf\ 
for /r %%a in (*.pdf) do (
    copy %%a c:\qa\%%~nxa 
    GOTO :EXIT 
) 
:Exit 

Wichtiger Hinweis Dateinamen eindeutig sind. Zielverzeichnis ist niemals ein Unterverzeichnis der Quelle. Der baove-Code funktioniert für die erste PDF-Datei in einem Unterordner, erledigt aber den Rest der Unterordner nicht.

+1

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

+0

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

+0

Das ist kein gültiger Code, bitte auch ** editiere ** deinen ursprünglichen Beitrag mit deinem Code. – Compo

Antwort

0

Hier ist ein Beispielcode für Sie. Es schaut in jedes Verzeichnis und jedes mögliche Unterverzeichnis unter C:\PDF, es schaut nicht auf Dateien innerhalb C:\PDF. Wenn Sie etwas anderes suchen, dann aktualisieren Sie Ihre Frage entsprechend.

@Echo Off 
For /D /R "C:\PDF" %%A In (*) Do (
    For /F "Delims=" %%B In ('Dir/B/A-D/O-N "%%A\*.pdf" 2^>Nul') Do (
     Set "first=%%A\%%B") 
    SetLocal EnableDelayedExpansion 
    If Exist "!first!" Copy "!first!" "C:\QA" 
    EndLocal) 
Pause 

Bitte verwenden Sie es nicht einfach, nehmen Sie sich Zeit, es zu lernen, indem sie verschiedene Verweise sowie überprüfen.

0

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 /?
0

Alles, was Sie tun müssen, ist die Eigenschaften von Dir & Für zu kombinieren. Jetzt können Sie den Code einfach analysieren und entsprechend Ihren Anforderungen modifizieren.

Hinweis für den Code:

CD /D "C:\PDF" 
DIR /s /b *.pdf >a.txt 
For /f "Tokens=*" %%A In (a.txt) Do (Copy /Y "%%A" "C:\QA") 
Exit 

Und es ist fast alles, was Sie brauchen. :)