我需要找到一种方法来选择文件夹中的所有文件,以便我可以将它们剪切并粘贴到其他地方。所有相应的文件夹都在一个主根文件夹中。有没有命令提示符或总指挥官技巧可以做到这一点?
答案1
@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
在批处理末尾添加以读取其回显的文件计数。
答案2
$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 新手。