상대 파일 이동을 수행하는 방법 / 명령 / 소프트웨어?


0

내가하려는 일을 설명하겠습니다.

수천 개의 파일이있는 프로젝트에서 패턴과 일치하는 많은 파일을 제거하려고하지만 백업을 저장하려고합니다. 상대 폴더 구조를 대상에 유지할 이동 작업을 수행하는 방법을 찾고 있습니다.

우리가 가지고 있다면 :

D:\matchingfile1.txt
D:\matchingfile2.txt
D:\nonmatchingfile1.txt
D:\nonmatchingfile2.txt
D:\foofolder\matchingfile1.txt
D:\foofolder\matchingfile2.txt
D:\foofolder\nonmatchingfile1.txt
D:\foofolder\nonmatchingfile2.txt
D:\barfolder\sub\matchingfile1.txt
D:\barfolder\sub\matchingfile2.txt
D:\barfolder\sub\nonmatchingfile1.txt
D:\barfolder\sub\nonmatchingfile2.txt

이 결과를 D : \ _ BACKUP \ 20130527 \로 옮기고 싶습니다.

D:\_BACKUP\20130527\matchingfile1.txt
D:\_BACKUP\20130527\matchingfile2.txt
D:\_BACKUP\20130527\foofolder\matchingfile1.txt
D:\_BACKUP\20130527\foofolder\matchingfile2.txt
D:\_BACKUP\20130527\barfolder\sub\matchingfile1.txt
D:\_BACKUP\20130527\barfolder\sub\matchingfile2.txt

NOTE1 : 이동할 파일은 "matchingfile"이라는 이름이 아니며 , 이는 단지 예시적인 예입니다. 현재 추출한 것은 대상 파일 (일반 텍스트)의 전체 경로 목록이므로 메소드 / 명령 / 프로그램의 입력이어야합니다.

NOTE2 : 디렉토리 레벨은 임의 일 수 있습니다.

작업은 Windows 7 OS에 있습니다.

미리 감사드립니다.

답변:


2

집에 도착했을 때 지금 살펴 봤는데 이것이 효과가 있습니다.

setlocal EnableDelayedExpansion

IF [%1]==[] (set txtpath=%CD%\list.txt) else (set txtpath=%1)
set projectfolder="D:\"
set savelocation="D:\_Backup"

cd /d %projectfolder%
set lenght=%CD%
set i=-1
set n=0
:nextChar
    set /A i+=1
    set c=!lenght:~%i%,1!
    set /A n+=1
    if "!c!" == "" goto endLine 
    goto nextChar

:endLine
for /f "tokens=*" %%A in (!txtpath!) do call :filecheck "%%A"
goto :eof

:filecheck
set folder=%~pd1%
set location="!folder:~%n%!"
if not exist %savelocation%\%location% mkdir %savelocation%\%location%
copy %1 %savelocation%\%location% && del /q %1
goto :eof
endlocal

파일 경로에 대한 입력으로 * .txt 파일을 원한다는 것을 반영하도록 스크립트를 다시 만들었습니다.이 기능은 "프로젝트 폴더", "저장 위치", "txtpath"를 설정해야하지만 그 후에는 스크립트를 어디에서나 실행할 수 있습니다. 그리고 당신이 원하는 것을합니다. (프로젝트 폴더 / 저장 위치를 ​​설정 한 후 txt 파일을 끌어다 놓을 수 있습니다)

.txt 파일에있는 모든 파일의 드라이브 (또는 해당 문제의 다른 드라이브)에있는 모든 파일의 폴더 구조를 다시 만들어 파일을 복사 한 다음 원래 폴더에서 삭제합니다.


안녕하세요 @ Curs3d. 글쎄, 결국 누군가에게 나에게 그것을 프로그래밍하도록 요구하지 않았고 (나도 개발자이기도하고 박쥐도 좋아합니다) 기존 명령 / 프로그램을 요구했습니다. 감사합니다 Curs3d. 완벽하게 작동합니다. 귀하의 솔루션과 Martin은 완벽하게 작동하며 어느 것을 수용 해야할지 모르겠습니다. 추가 구성 요소를 설치할 필요가 없다는 데 동의합니다.
Áxel Costas Pena

1

음,이 간단한 XCOPY 명령,하지만 당신은 D에 _backup 폴더가 : 그래서 D를 통과 : 드라이브는 선택할 것이다 _backup폴더를

당신은이 만들 수있는 _backup당신이 할 수 있도록 숨겨진

xcopy d:\matchingile?.txt d:\_backup\matchingfile?.txt /s


더 나은 방법을 생각하지만 오래 깨어 왔습니다
Keltari

백업 폴더에 상대 폴더를 유지하는 데 어떻게 도움이됩니까? 뭔가 빠졌습니까?
Áxel Costas Pena

1

개인적으로 저는 powershell 스크립팅을 배우기 시작했습니다.이 작업은 훌륭합니다. 코드를 .ps1 파일에 저장하고 powershell 스크립트 (Set-ExecutionPolicy RemoteSigned) 실행을 활성화하십시오. 이렇게하면 와일드 카드 대신 정규식을 사용하여보다 강력한 필터링 도구를 사용할 수 있습니다. 물론 텍스트 파일에서 파일 목록을 받도록 스크립트를 수정할 수도 있습니다.

# Variables
$backupFolder="D:\_BACKUP\20130527";
$folderTobeBackedUp="D:\";
$overwrite=$True;
$filter="filenameToBeMatched";

function recurseDir($dir)
{
    $dirs=$(get-childitem "$($dir.FullName)");

    foreach( $f in $dirs)
    {
        if( $f.PSisContainer )
        {
            recurseDir $f;
        }    
        elseif($f.Name -imatch "$filter")
        {
            copyFile $f;
        }
    }
}

function copyFile($f)
{
    $newFile=$($f.FullName).Replace($folderTobeBackedUp, $backupFolder);
    $parent="$(Split-Path $newFile -Parent)";
    if( -not (test-path $parent))
    {
        new-item -Path $parent -type "directory";
    }
    try
    {
        $f.CopyTo("$newFile", $overwrite);
        (rmdir -Path $f.FullName -Force);
    }
    catch
    {
        Write-Host $_.Exception.ToString();
    }   
}

$folders=$(get-childitem "$folderTobeBackedUp");
foreach($f in $folders)
{
    if( $f.Name -imatch "_BACKUP" )
    {
        ; # Do nothing.
    }
    elseif( $f.PSisContainer )
    {
        recurseDir $f;
    }
    elseif($f.Name -imatch "$filter")
    {
        copyFile $f;
    }
}

안녕하세요 @Martin. 글쎄, 결국 누군가에게 나에게 그것을 프로그래밍하도록 요구하지 않았고 (나도 개발자이기도하고 박쥐도 좋아합니다) 기존 명령 / 프로그램을 요구했습니다. 고마워 마틴 완벽하게 작동합니다. 귀하의 솔루션과 Curs3d 모두 완벽하게 작동하며 어느 것을 수용 해야할지 모르겠습니다. 마지막으로 추가 구성 요소를 설치할 필요가 없다는 이유로 Curs3d를 수락 할 것입니다. 단순히 완벽하기 때문에 귀하의 구성 요소를 받아들이지 않는 것이 대단히 죄송합니다. 다시 한번 감사드립니다.
Áxel Costas Pena

문제는 전혀 없습니다. 실제로 프로그래밍하여 PowerShell 스크립팅을 포함한 시험이 나왔습니다. Window Vista 이상을 실행하는 경우 PowerShell이 ​​포함되어 있으며 설치할 필요가 없지만 나중에 더 많은 기능이 필요하지 않거나 정규식 일치가 필요하지 않은 경우 Curs3d의 솔루션이 가장 쉽습니다. 와.
Martin

-1

유닉스 도구 도구 나 스크립트 언어 (예 : perl)를 설치하는 옵션입니까?

기본적으로 파일을 읽을 수있는 언어가있는 경우 한 줄씩 변수로 읽어서 수행 할 수 있습니다.

나는 여기서 이것을 펄로 스케치하고있다 (확실히 수정해야 할 것이다) :

while ( <NAMESFILE> ) {  # for all lines until EOF
   $file= $_;
   system("xcopy $file d:\backup\$file");
   system("del $file");
}

이 경우 xcopy는 전체 경로를 생성하고 del은 원본을 제거합니다.


흠 ...하지만 $ 파일에는 전체 경로가 포함됩니다!
Áxel Costas Pena

공감도, 응? 여기에 첫 두 문자를 자르는 것이 너무 어렵지 않을 것이라고 생각합니다. 나는 대답을 "스케치"할 것이라고 말했습니다.
The-Dood

-1

XCOPY는 필요한 작업을 수행합니다. 따라서 일괄 작업에 사용할 수 있습니다.

xcopy "C:\FolderName\*.*" "D:\FolderName\*.*" /D /E /V /C /I /F /H /R /K /Y /Z

다음은 스위치의 의미를 포함한 완전한 구문입니다.

C:\>xcopy /?
Copies files and directory trees.

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
                           [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                           [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
                           [/EXCLUDE:file1[+file2][+file3]...]

  source       Specifies the file(s) to copy.
  destination  Specifies the location and/or name of new files.
  /A           Copies only files with the archive attribute set,
               doesn't change the attribute.
  /M           Copies only files with the archive attribute set,
               turns off the archive attribute.
  /D:m-d-y     Copies files changed on or after the specified date.
               If no date is given, copies only those files whose
               source time is newer than the destination time.
  /EXCLUDE:file1[+file2][+file3]...
               Specifies a list of files containing strings.  Each string
               should be in a separate line in the files.  When any of the
               strings match any part of the absolute path of the file to be
               copied, that file will be excluded from being copied.  For
               example, specifying a string like \obj\ or .obj will exclude
               all files underneath the directory obj or all files with the
               .obj extension respectively.
  /P           Prompts you before creating each destination file.
  /S           Copies directories and subdirectories except empty ones.
  /E           Copies directories and subdirectories, including empty ones.
               Same as /S /E. May be used to modify /T.
  /V           Verifies each new file.
  /W           Prompts you to press a key before copying.
  /C           Continues copying even if errors occur.
  /I           If destination does not exist and copying more than one file,
               assumes that destination must be a directory.
  /Q           Does not display file names while copying.
  /F           Displays full source and destination file names while copying.
  /L           Displays files that would be copied.
  /G           Allows the copying of encrypted files to destination that does
               not support encryption.
  /H           Copies hidden and system files also.
  /R           Overwrites read-only files.
  /T           Creates directory structure, but does not copy files. Does not
               include empty directories or subdirectories. /T /E includes
               empty directories and subdirectories.
  /U           Copies only files that already exist in destination.
  /K           Copies attributes. Normal Xcopy will reset read-only attributes.
  /N           Copies using the generated short names.
  /O           Copies file ownership and ACL information.
  /X           Copies file audit settings (implies /O).
  /Y           Suppresses prompting to confirm you want to overwrite an
               existing destination file.
  /-Y          Causes prompting to confirm you want to overwrite an
               existing destination file.
  /Z           Copies networked files in restartable mode.

The switch /Y may be preset in the COPYCMD environment variable.
This may be overridden with /-Y on the command line.

-1-이것은 하나의 드라이브 에서 동일한 드라이브의
nc4pk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.