Answers:
@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 1
和C:\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和target。如果您使用相同的文件名,则不会覆盖。您可以向Move-Item添加力量以实现此目的。
这可能很简明,我是Powershell的新手。