Windows 7-폴더에있는 모든 파일 찾기 찾아서 다른 곳에서 잘라내어

폴더에있는 모든 파일을 선택하는 방법을 찾아서 다른 곳에서 잘라내어 붙여 넣을 수 있습니다. 모든 해당 폴더는 하나의 기본 루트 폴더 안에 있습니다. 명령 프롬프트 또는 총 사령관이 있습니까?



답변

@echo off
Setlocal EnableDelayedExpansion

SET ROOT_FOLDER=C:\TEST 1
SET TARGET_FOLDER=C:\TEST 2

FOR /D %%G IN ("%ROOT_FOLDER%"\*) do (
CD %%G
    FOR /f %%A in ('dir ^| find "File(s)"') do (
        set cnt=%%A
        Echo %%G  : !cnt!
        IF !cnt! == 1 (
            move /-y "*.*" "%TARGET_FOLDER%"
        )
    )
)

이 배치는 C:\TEST 1하위 폴더 내부 에서 개수 파일을 찾습니다. 외로운 파일을 찾으면로 이동합니다 C:\TEST 2. 파일 이름이 이미 존재하는 경우 덮어 쓰기를 요청합니다.

교체 C:\TEST 1C:\TEST 2자신의 값.

pause배치의 끝에 추가 하여 에코 된 파일 수를 읽을 수 있습니다.


답변

$src = "G:\temp"
$target = "G:\notalone"

if (Test-Path $src)
{
    $folders = Get-ChildItem $src -Recurse | ?{ $_.PSIsContainer }
    foreach($folder in $folders)
    {
        $fc = Get-ChildItem $folder.FullName | ?{!$_.PSIsContainer} | Measure-Object | Select-Object -Expand Count
        if ($fc -eq 1)
        {
            $file = Get-ChildItem $folder.FullName | ?{!$_.PSIsContainer} | Select-Object
            Write-Host "Moving " $file.FullName " to " $target
            Move-Item $file.FullName $target
        }
    }
}

이것은 Powershell에서 작동하고 src와 대상을 대체해야합니다. 파일 이름이 같으면 덮어 쓰지 않습니다. 이를 위해 Move-Item에 힘을 추가 할 수 있습니다.

이것은 아마도 응축 될 수 있습니다. 나는 powershell을 초보자입니다.