2017-01-17 1 views
0

Ich muss oft Dateien bei der Arbeit aufspüren, hundert aus einer Liste von tausend, so dass ich eine Batch-Datei, die die Dateien an einem Ort kopieren würde, ziehen sind in einem CSV im Batch-Dateien-Verzeichnis aufgeführt und fügen sie dann in einen Ordner auf meinem Desktop ein.Batch-Datei zum Kopieren der Liste der Dateien einschließlich der Unterverzeichnisse

Das hat funktioniert, aber ich muss das oft für Hunderte von Dateien über ein Dutzend oder so Verzeichnisse tun, also habe ich versucht, es zu ändern, um Unterverzeichnisse einzuschließen. Ich habe ein Problem damit, es zum Laufen zu bringen, und ich habe mich gefragt, ob die ausgezeichneten Leute bei StackOverflow helfen könnten. Vielen Dank!

@echo on 
set theDest="%USERPROFILE%\Desktop\Batch Copies %date:/=%" 
set /p MY_TEXT=<FileList.csv 
echo.%MY_TEXT% 
set MY_TEXT=%MY_TEXT:"",""=,% 
echo.%MY_TEXT% 
if not exist %theDest% md %theDest% 
pause 
for /R %MY_TEXT% %%G IN (.) do (
for /F "skip=1 delims=" %%f in (FileList.csv) do (
    if exist "%MY_TEXT%\%%f.*" (
     copy "%MY_TEXT%\%%f.*" %theDest% 
     ) else (
    if exist "%MY_TEXT%\%%f" (
     copy /R "%MY_TEXT%\%%f" %theDest% 
     ) else echo "%MY_TEXT%\%%f" does not exist && echo   0 file^(s^) copied. && echo  ERROR: %%f not found && echo. && pause) 



) 
) 
echo. && echo. && echo Process Completed. &&echo. 
pause 

Ein Teil des Problems ist, war ich gerade in Batch bekommen, wenn ich dies schrieb und ließ es dann und ich versuche, wieder zu kommen und herauszufinden, wie alles funktioniert, so habe ich wahrscheinlich messed es mehr Möglichkeiten als ein bis .

Antwort

0

Also die FOR-Schleife hat eine/R-Option, die den gleichen Befehl über alle Unterverzeichnisse ausführen wird.

In Ihrem Fall, ich glaube, Sie wollen:

for /R %%a in (.) do call :MyCopyFunction %%a 
exit /B 

:MyCopyFunction [%1 is the current directory] 
    echo My Current directory is %1 
    [Do All your code here, using %1 as the current directory] 
exit /B 

Ich verstehe nicht, was Ihr Skript im Detail tut, so haben Sie immer noch in den Details zu füllen.

Aber das zeigt Ihnen, wie Sie die gesamte Verzeichnisstruktur durchlaufen.

+0

So für/R% my_text% %% G IN do MyCopyFunction nennen (.): MyCopyFunction für/F "skip = 1 delims =" %% f in (FileList.csv) tun \t wenn exist „%% f. *“( \t \t Kopie "%% f. *" % theDest% \t \t) else ( \t wenn vorhanden "%% f"( \t \t Kopie "%% f" % theDest% \t \t) – hype124

+0

Entschuldigung, ich konnte es nicht zur Arbeit bringen, wie referenziere ich die Variable f, ohne sie im aktuellen Verzeichnis zu deklarieren? – hype124

+0

Sie haben geschrieben: 'für/R% MY_TEXT% %% G'. Ich habe keine Ahnung, warum '% MY_TEXT%' in der Mitte der Schleife ist ?? – abelenky

Verwandte Themen