2016-08-16 3 views
2

Ich will mehr als 1000 Dateien von einem Quellordner kopieren wieWie kopiert man Dateien in Ordner basierend auf den ersten 15 Zeichen des Datei- und Ordnernamens?

sourcefolder\prod_de_7290022.xlsx 
sourcefolder\prod_de_1652899.xlsx 
sourcefolder\prod_de_6272899.xlsx 
sourcefolder\prod_de_6189020.xlsx 
sourcefolder\prod_de_7290022.wav 
sourcefolder\prod_de_1652899.wav 
sourcefolder\prod_de_6272899.wav 
sourcefolder\prod_de_6189020.wav 
sourcefolder\prod_de_7290022_mark.xlsx 
sourcefolder\prod_de_1652899_mark.xlsx 
sourcefolder\prod_de_6272899_mark.xlsx 
sourcefolder\prod_de_6189020_mark.xlsx 

nach rechts Zielordner. Die Ordnernamen werden - basierend auf einer anderen Routine - lange und nur die ersten 15 Zeichen mit den ersten 15 Zeichen des Dateinamens identisch sind, wie:

destination\prod_de_1652899_tool_big\ 
destination\prod_de_6272899_bike_red\ 
destination\prod_de_6189020_bike-green\ 
destination\prod_de_7290022_camera_good\ 

ich für eine Routine suchen Sie die Dateien in das kopieren Ordner, wie sourcefolder\prod_de_1652899.xlsx in destination\prod_de_1652899_tool_big\.

Ist hier jemand mit einer guten Idee für ein Batch/Skript?

+1

Mögliche Duplikat [Batch-Datei setzen Ordner in andere Ordner auf den Namen abhängig] (http://stackoverflow.com/questions/38970982/batch-file- put-folders-in-anderen-Ordnern-abhängig-auf-Name) – SomethingDark

+0

Überprüfen Sie diesen Link http://www.coviantsoftware.com/blog/2014/12/copy-files-multiple-destinations/ Vielleicht können Sie das ändern Code für Ihre Bedürfnisse. – Jonas

Antwort

0

Ich schlage vor, diese kommentiert Batch-Code für diese Aufgabe zu verwenden:

@echo off 
setlocal EnableExtensions 
set "SourceFolder=sourcefolder" 
set "TargetFolder=destination" 

rem Call subroutine CopyFile for each non hidden and 
rem non system file found in specified source folder 
rem and then exit processing of this batch file. 

for %%I in ("%SourceFolder%\*") do call :CopyFile "%%~fI" 

endlocal 
goto :EOF 


rem This is a subroutine called for each file in source folder. 
rem It takes the first 15 characters from each file name passed 
rem to this subroutine via first parameter and search for a 
rem folder in target folder starting with same 15 characters. 
rem If such a folder is found, the file is copied to this folder 
rem and the subroutine is exited. 
rem Otherwise a new folder is created for the file and if 
rem this is indeed successful, the file is copied into the 
rem newly created folder with an appropriate message. 

:CopyFile 
set "FileName=%~n1" 
set "DirectoryName=%FileName:~0,15%" 
for /D %%D in ("%TargetFolder%\%DirectoryName%*") do (
    copy /B /Y %1 /B "%%~D\" >nul 
    goto :EOF 
) 

set "NewFolder=%TargetFolder%\%DirectoryName%_new" 
md "%NewFolder%" 
if exist "%NewFolder%\" (
    echo Created new folder: %NewFolder% 
    copy /B /Y %1 /B "%NewFolder%\" >nul 
    goto :EOF 
) 

echo Failed to create folder: %NewFolder% 
echo Could not copy file: %1 
goto :EOF 

für die verwendeten Befehle verstehen und wie sie arbeiten, eine Eingabeaufforderung öffnen, führen Sie dort die folgenden Befehle ein, und ganz alle Hilfe lesen Seiten, die für jeden Befehl sehr sorgfältig angezeigt werden.

  • call /?
  • copy /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • md /?
  • rem /?
  • set /?
  • setlocal /?
Verwandte Themen