폴더 구조에있는 하위 폴더에 파일이 있습니다.
D:\Folder_Source
D:\Folder_Source\file1.txt
D:\Folder_Source\FolderA
D:\Folder_Source\FolderA\file1.txt
D:\Folder_Source\FolderA\file2.txt
D:\Folder_Source\FolderB
D:\Folder_Source\FolderB\file3.txt
D:\Folder_Source\FolderB\file4.txt
D:\Folder_Source\FolderB\file8.txt
명령 프롬프트 txt
에서 각 하위 폴더의 일부 파일 을 이동하고 싶습니다 C:\Destination\
.
예를 들어, 내가 이동하려는 파일이 file1.txt
, file2.txt
, file8.txt
, 등
복사중인 원본 폴더와 동일한 이름의 파일이 대상 폴더에있는 경우 두 파일을 모두 유지하고 기존 파일을 덮어 쓰지 않고 싶습니다 .
나는 이것을 시도했지만 실패하고 예상 결과를 얻지 못했습니다.
move /s file1.txt file2.txt file8.txt C:\Destination
명령 줄이나 배치 스크립트에서도 이와 같은 것이 가능합니까?
배치 스크립트를 사용하여 세 개의 변수를 설정할 수 있습니다. 하나는 특정 파일에 대해 순회 될 루트 소스 디렉토리 의 경로 이고, 두 번째 는 새 파일이 복사 될 대상 경로 이고, 세 번째는 파일입니다. 대상 디렉토리 에 복사하려는 파일 이름 목록 .
이 세 가지 변수를 사용하면 FOR /R
루프를 사용 하여 소스 위치를 탐색하고 조건 IF
논리를 사용 하여 각 파일에 대해 수행해야하는 복사 또는 삭제 작업에 대해 파일이 이미 존재하는지 여부를 확인할 수 있습니다. 또한 a CALL
및 변수 대체 를 사용 하여 파일 이름의 일부를 다른 루틴에 전달하고 추가 IF
논리를 사용 SET /A
하여 중복 파일 번호 등을 증가시킬 수 있습니다.
@ECHO OFF
SET "source=C:\Folder_Source"
SET "dest=C:\Destination"
SET "FileList=file1.txt file2.txt file8.txt"
SET "dupCnt=1"
FOR /R "%source%" %%A IN (%FileList%) DO (
IF NOT EXIST "%dest%\%%~NXA" (
XCOPY /F /Y "%%~FA" "%dest%\" && IF EXIST "%%~FA" DEL /Q /F "%%~FA"
) ELSE (
CALL :DupeRoutine "%%~FA" "%%~NA" "%%~XA"
)
)
GOTO :EOF
:DupeRoutine
IF EXIST "%dest%\%~2_(%dupCnt%)%~3" (
SET /A dupCnt=%dupCnt%+1
CALL :DupeRoutine "%~1" "%~2" "%~3"
) ELSE (
IF NOT EXIST "%dest%\%~2_(%dupCnt%)%~3" ECHO F | XCOPY /Y /F "%~1" "%dest%\%~2_(%dupCnt%)%~3" && DEL /Q /F "%~1"
SET "dupCnt=1"
)
GOTO :EOF
참고 : 중복 파일 이름에
_(#)
내가 사용한 것과 다른 명명 규칙을 사용_(%dupCnt%)
하려면 스크립트에서"%dest%\%~2_(%dupCnt%)%~3"
를 사용하려는 다른 형식 으로 변경해야 하지만%dupCnt%
증가 할 숫자입니다. 이 문제에 대해서도 기꺼이 도와 드리겠습니다.
이전 소스
D:\Folder_Source
│ file1.txt
│ file2.txt
│ file4.txt
│ file8.txt
│ file99.txt
│
├───FolderA
│ file1.txt
│ file2.txt
│ file4.txt
│ file8.txt
│ file99.txt
│
└───FolderB
file1.txt
file2.txt
file4.txt
file8.txt
file99.txt
이후 목적지
C:\Destination
file1.txt
file1_(1).txt
file1_(2).txt
file2.txt
file2_(1).txt
file2_(2).txt
file8.txt
file8_(1).txt
file8_(2).txt
이후 소스
D:\Folder_Source
│ file4.txt
│ file99.txt
│
├───FolderA
│ file4.txt
│ file99.txt
│
└───FolderB
file4.txt
file99.txt
일괄 대체 (FOR /?)
또한 FOR 변수 참조의 대체가 향상되었습니다. 이제 다음과 같은 선택적 구문을 사용할 수 있습니다.
%~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~nI - expands %I to a file name only %~xI - expands %I to a file extension only
산술 식 (SET / a)
"따옴표"에 식을 배치하는 것은 간단한 산술에서는 선택 사항이지만 논리 연산자를 사용하는 모든 식에는 필요합니다.
모든
SET /A
분수 결과를 반환 계산은 가장 가까운 정수 정수로 반올림됩니다.평가할 표현식에는 다음 연산자가 포함될 수 있습니다.
+ Add set /a "_num=_num+5"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다