Klasörlerinde yalnız olan tüm dosyaları seçmenin bir yolunu bulmam gerekiyor, böylece onları başka bir yere kesip yapıştırabilirim. İlgili tüm klasörler, bir ana kök klasörün içindedir. Bunun için bir komut istemi veya toplam komutan hilesi var mı?
Klasörlerinde yalnız olan tüm dosyaları seçmenin bir yolunu bulmam gerekiyor, böylece onları başka bir yere kesip yapıştırabilirim. İlgili tüm klasörler, bir ana kök klasörün içindedir. Bunun için bir komut istemi veya toplam komutan hilesi var mı?
Yanıtlar:
@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%"
)
)
)
Bu Toplu İş C:\TEST 1
alt klasörlerin içine bir sayım dosyası bakacaktır . yalnız bir dosya bulur bulmaz onu taşıyacaktır C:\TEST 2
. dosya adının zaten mevcut olması durumunda üzerine yazmayı da isteyecektir.
Değiştirin C:\TEST 1
ve C:\TEST 2
kendi değerlerinizle.
yan yana eklediği pause
dosya sayısını okumak için toplu işin sonuna ekleyebilirsiniz .
$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
}
}
}
Bu, Powershell'de çalışmalı, src ve hedefi değiştirmelidir. Aynı dosya adlarına sahipseniz, üzerine yazılmaz. Bunu yapmak için Move-Item'e kuvvet ekleyebilirsiniz.
Bu muhtemelen yoğunlaşmış olabilir, ben powershell acemi.