2016-11-08 2 views
1

Ich möchte Dateien, die einen Teil seines Namens gemeinsam haben, aus einer bekannten Anzahl von Unterordnern kopieren. Ich habe versucht mit diesem Code:Batch: Kopieren von Dateien mit demselben Teilnamen von Unterordnern zu einem anderen

@Echo Off 
rem Check if the aFolder exists and delete it if it exists 

IF EXIST "%~dp0\aFolder" (
    rd /s /q "%~dp0\aFolder" 
) 

rem Create a new aFolder 
mkdir "%~dp0\aFolder" 

rem Copy the files from the subfolders inside of bFolder to aFolder  
For /F "tokens=1" %%A in (%~dp0\subFoldersList.txt) do (
    For /F "tokens=1" %%B in (%~dp0\formatList.txt) do (
     pushd "%~dp0\bFolder\%%A" 
     For %%C in (%%AcommonPart.%%B) do xcopy %%C "%~dp0\aFolder" 
    ) 
) 

Der Code verwenden zwei TXT-Dateien, die verschiedene Daten enthält. In subFoldersList.txt:

subFolder1 
subFolder2 
subFolder3 

In formatList.txt:

xls 
xlsx 
xlsm 

Überprüfung der Code die Schleife nicht nie und ich unbekannt läuft, warum.

Edit:

Der Ordner Skelett, das ich benutze, ist dies:

rootFolder 
|->aFolder 
||-->subFolder1 
|||--->subFolder1commomPart.xlsx (for example) 
|||--->subFolder1other1Part.xlsm (for example) 
|||--->subFolder1other2Part.xls (for example) 
||-->subFolder2 
|||--->subFolder1commomPart.xlsm (for example) 
|||--->subFolder1other1Part.xlsx (for example) 
|||--->subFolder1other2Part.xls (for example) 
||-->subFolder3 
|||--->subFolder1commomPart.xls (for example) 
|||--->subFolder1other1Part.xlsm (for example) 
|||--->subFolder1other2Part.xlsx (for example) 
|->bFolder 
|->subFoldersList.txt 
|->formatList.txt 
|->Other Stuff 

Ich möchte dieses Ergebnis erhalten:

rootFolder 
|->aFolder 
||-->subFolder1 
|||--->subFolder1commomPart.xlsx (for example) 
|||--->subFolder1other1Part.xlsm (for example) 
|||--->subFolder1other2Part.xls (for example) 
||-->subFolder2 
|||--->subFolder1commomPart.xlsm (for example) 
|||--->subFolder1other1Part.xlsx (for example) 
|||--->subFolder1other2Part.xls (for example) 
||-->subFolder3 
|||--->subFolder1commomPart.xls (for example) 
|||--->subFolder1other1Part.xlsm (for example) 
|||--->subFolder1other2Part.xlsx (for example) 
|->bFolder 
||--->subFolder1commomPart.xlsx (for example) 
||--->subFolder1commomPart.xlsm (for example) 
||--->subFolder1commomPart.xls (for example) 
|->subFoldersList.txt 
|->formatList.txt 
|->Other Stuff 
+0

**% ~ dp0 ** hat bereits einen nachgestellten Backslash, entfernen Sie die, die Sie hinzugefügt haben, folgen Sie ihm! – Compo

+0

Ich denke 'Für %% C in (%% AcommonPart. %% B) sollte xcopy %% C"% ~ dp0 \ aFolder "' geändert werden in 'Für %% C in (" commonPart. %% B ") do xcopy "%% ~ C" "% ~ dp0 \ aFolder \" ', weil' pushd' bereits in den Unterordner '%% A' gewechselt ist; Beachten Sie auch das verbesserte Quoting, das '~' in '%% ~ C' und den nachfolgenden Backslash am Ziel. Sie sollten auch 'Tokens = 1 'zu' delims = 'ändern. Bitte zeigen Sie uns einige Beispiele von Dateinamen ... – aschipfl

+1

Sie müssen auch ein 'POPD' ausgeben. – Squashman

Antwort

0

Basierend auf, was Sie so zur Verfügung gestellt haben weit, vielleicht ist das was du beabsichtigst:

@ECHO OFF 

REM Make sure script directory is current 
IF /I NOT "%CD%\"=="%~dp0" PUSHD "%~dp0" 2>NUL||EXIT/B 

REM Make sure source files exist 
FOR %%A IN ("subFoldersList.txt" "formatList.txt") DO IF NOT EXIST %%A EXIT/B 

REM Delete aFolder if it exists 
IF EXIST "aFolder\" RD/S/Q "aFolder" 

REM Create aFolder 
MD "aFolder" 

REM Copy the files from the subfolders inside of bFolder to aFolder  
FOR /F "USEBACKQ DELIMS=" %%A IN ("subFoldersList.txt") DO (
    IF EXIST "bFolder\%%A\" (PUSHD "bFolder\%%A" 
     FOR /F "USEBACKQ DELIMS=" %%B IN ("%~dp0formatList.txt") DO (
      IF EXIST "commonPart.%%B" (
       IF NOT EXIST "%~dp0aFolder\commonPart.%%B" (
        COPY "commonPart.%%B" "%~dp0aFolder"))) 
     POPD)) 
+0

Der Code funktioniert nicht. Ich habe versucht, nach der Eingabe eines Befehls mit einer Pause zu überprüfen, aber nicht die erste for-Schleife ausgeführt. – Tilan04

+0

Es gibt einfache Dinge zu tun, um zu debuggen oder Feedback über jemand Code zu geben, "der Code funktioniert nicht" ist nicht wirklich ausreichend Informationen für mich zu helfen. Wenn es nicht zur ersten Schleife kommt, ist wahrscheinlich mindestens eine der txt-Dateien nicht neben dem Skript vorhanden. – Compo

+0

Ja ... Es war es. Ich habe den Dateinamen umbenannt und ein Buchstabe fehlt. lol Danke für deine Hilfe. – Tilan04

Verwandte Themen