답변:
특별한 도구 나 스크립팅을 사용할 이유가 없습니다. 탐색기에서 검색 기능을 사용하십시오.
*하고 Enter 키를 누릅니다.오히려 스크립트를 사용하여 시작하고 잊어 버릴 수 있다면 그렇게 할 수도 있습니다. 교체 명령 mv *\* .은 매우 쉽지만 ( for /r %f in (*.*) do @move "%~f" .), @Nicole Hamilton의 답변에서와 같이 복제본을 남겨 두지 않고 중복을 처리하고 싶습니다. 중복 파일 이름에 숫자를 추가하는 것이 가장 쉬운 방법 일 것입니다.
다음 배치 파일을 복사하여 메모장에 붙여 넣고 "flatten.cmd"(따옴표 포함)로 저장하십시오.
@echo off
cd "%~1"
md tempryfolder
move *.* tempryfolder
for /r %%f in ("*.*") do call :START "%%~f"
for /r /d %%f in (*.*) do rd "%%~f"
GOTO :EOF
:START
setlocal
If exist "%~n1%~x1" set /a num=2
:LOOP
If exist "%~n1%num%%~x1" (
set /a num+=1
goto loop
)
move "%~1" "%~n1%num%%~x1"
스크립트를 사용하려면 평평하게 만들 폴더를 드래그하십시오.
병합하려는 System.Kind:<>folder폴더로 이동하고 결과에서 폴더를 제외하도록 검색하여 Windows 탐색기에서 병합 할 수 있습니다 .
그런 다음 Ctrl + A를 사용하여 모든 파일을 선택하고 복사하여 새 폴더에 붙여 넣을 수 있습니다. Windows 탐색기에서 중복 파일 이름을 처리하는 방법을 묻습니다.
System.Kind:<>cartella)
이런 종류의 일은 유닉스 쉘에서 쉽습니다. 내 자신의 Hamilton C 쉘 ( 무료 버전 포함 )로 수행 할 수있는 작업은 다음과 같습니다. Cygwin bash 와 매우 유사한 작업을 수행 할 수 있습니다.
mv *\* .
디렉토리가 실제로 큰 경우 Windows가 하위 프로세스로 전달하기에는 너무 긴 명령 행으로 와일드 카드를 사용할 수 있습니다. (Windows CreateProcess 호출은 인수 목록을 32K 유니 코드 문자로 제한합니다.) 그러나 C 쉘에는 내부적으로 제한이 없으므로 다음과 같이 전체 목록을 반복 할 수 있습니다.
foreach i ( *\* )
mv $i .
end
위의 @MarkAllen의 관점에서, 이런 종류의 이름은 중복 된 이름이 없다고 가정합니다. 있는 경우 목록의 이후 사본이 이전 사본을 겹쳐 씁니다. 이것이 문제가 mv되는 경우 덮어 쓰지 않을 경우에만 파일을 반복 할 수 있습니다 . :t운영자는 것입니다 꼬리 연산자 . -e운영자는이다 파일이 테스트를 존재 .
foreach i ( *\* )
if ( -e $i:t ) then
echo -2 $i not moved because it already exists
else
mv $i .
end
end
이것은 여전히 비어있는 디렉토리를 남겨두고, 비운 후에 원하지 않을 수도 있습니다. 중요한 경우 다음 반복이 될 수 있습니다.
bash에서는 mv */* .나를 위해 일합니다.