Windows 7 - Finden Sie alle Dateien, die sich allein in einem Ordner befinden

10

Ich muss einen Weg finden, um alle Dateien auszuwählen, die sich allein in ihren Ordnern befinden, damit ich sie an einer anderen Stelle ausschneiden und einfügen kann. Alle entsprechenden Ordner befinden sich in einem Hauptstammordner. Gibt es dafür eine Eingabeaufforderung oder einen Total Commander Trick?

Spaceploit
quelle
Was möchten Sie in Unterverzeichnissen tun? Kennzeichnen Sie eine einzige Datei in einem Verzeichnis, das auch ein oder mehrere Unterverzeichnisse enthält? Oder ein einzelnes Unterverzeichnis, in dem sich keine anderen Dateien im übergeordneten Verzeichnis befinden?
AFH

Antworten:

5
@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%"
        )
    )
)

Dieser Stapel durchsucht C:\TEST 1Unterordner und zählt Dateien. Sobald eine einsame Datei gefunden wurde, wird sie in verschoben C:\TEST 2. Es wird auch nach einem Überschreiben gefragt, falls der Dateiname bereits vorhanden ist.

Ersetzen Sie C:\TEST 1und C:\TEST 2durch Ihre eigenen Werte.

Sie können pauseam Ende des Stapels hinzufügen , um die Anzahl der von ihm wiedergegebenen Dateien zu lesen.

Maher Fattouh
quelle
6
$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
        }
    }
}

Dies sollte in Powershell funktionieren, src und target ersetzen. Wenn Sie dieselben Dateinamen haben, werden diese nicht überschrieben. Sie können dem Verschiebungselement Kraft hinzufügen, um dies zu erreichen.

Dies könnte wahrscheinlich verdichtet werden, ich bin Anfänger mit Powershell.

Clarkn
quelle