2016-08-16 3 views
2

Я хочу, чтобы скопировать более 1000 файлов из исходной папки, какКак скопировать файлы в папки на основе первых 15 символов имени файла и папки?

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 

в папку правой назначения. Названия папок - на основе другой рутины - долго и только первые 15 символов идентичны с первых 15 символами каждого имени файла, например:

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

Ищу рутину, чтобы скопировать файлы в папку, например sourcefolder\prod_de_1652899.xlsx в destination\prod_de_1652899_tool_big\.

Есть ли кто-нибудь с хорошей идеей для партии/скрипта?

+1

Возможный дубликат [Пакетный файл поместить папки в другие папки в зависимости от имени] (http://stackoverflow.com/questions/38970982/batch-file- put-folders-in-other-folders-depends-on-name) – SomethingDark

+0

Посмотрите эту ссылку http://www.coviantsoftware.com/blog/2014/12/copy-files-multiple-destinations/ Возможно, вы можете изменить это кода в соответствии с вашими потребностями. – Jonas

ответ

0

Я предлагаю использовать этот комментировала пакетный код для выполнения этой задачи:

@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 

Для понимания используемых команд и как они работают, откройте окно командной строки, выполните там следующие команды, и читать полностью всю помощь страницы, отображаемые для каждой команды очень тщательно.

  • call /?
  • copy /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • md /?
  • rem /?
  • set /?
  • setlocal /?
Смежные вопросы