Tôi cần tìm cách chọn tất cả các tệp trong thư mục của chúng, vì vậy tôi có thể cắt và dán chúng ở một nơi khác. Tất cả các thư mục tương ứng nằm trong một thư mục gốc chính. Có một dấu nhắc lệnh, hoặc tổng số chỉ huy lừa cho việc này?
Tôi cần tìm cách chọn tất cả các tệp trong thư mục của chúng, vì vậy tôi có thể cắt và dán chúng ở một nơi khác. Tất cả các thư mục tương ứng nằm trong một thư mục gốc chính. Có một dấu nhắc lệnh, hoặc tổng số chỉ huy lừa cho việc này?
Câu trả lời:
@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%"
)
)
)
Batch này sẽ xem bên trong C:\TEST 1
các thư mục con một tập tin đếm. một khi nó tìm thấy một tập tin cô đơn, nó sẽ chuyển nó đến C:\TEST 2
. nó cũng sẽ yêu cầu ghi đè trong trường hợp tên tệp đã tồn tại.
Thay thế C:\TEST 1
và C:\TEST 2
với các giá trị của riêng bạn.
bạn có thể thêm pause
vào cuối đợt để đọc số tập tin được lặp lại bởi nó.
$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
}
}
}
Điều này sẽ hoạt động trong Powershell, thay thế src và đích. Nếu bạn có cùng tên tệp, nó sẽ không ghi đè. Bạn có thể thêm lực vào Move-Item để thực hiện điều đó.
Điều này có lẽ có thể được cô đọng, tôi là người mới với powershell.