在我开始发布代码之前,我想知道这是否可行。
我有一个文件夹目录,需要移动到新目录。 但是我只需要移动其中仅包含2个文件的文件夹。 其余的文件夹中有两个以上的文件,但它们需要保留。 那么使用批处理文件可行吗?
答案 0 :(得分:0)
这很有趣,所以我刺了一下:
@echo off
set "dir=C:\Your\Current\Directory"
set "ndir=C:\Your\New\Directory"
setlocal enabledelayedexpansion
for /d %%A in (%dir%\*) do (
pushd "%%A"
for /f %%B in ('dir /a-d-s-h /b ^| find /v /c ""') do (
set cnt=%%B
if "!cnt!" == "2" (if not exist "%ndir%\%%~nA" robocopy "%%A" "%ndir%\%%~nA" /e)
)
)
pause
我一直遇到问题,因此我修改了一些内容以使其能够完成我想要的;可能有更优雅的方法可以解决这个问题,但这很有效。第一件事是为当前目录(dir
)和新目录(ndir
)设置变量,以便日后更容易消化。我们还需要启用延迟扩展,因为计数变量(cnt
)的值将在循环迭代之间改变。第一个FOR
循环是/d
,它将循环遍历文件夹-我们将每个文件夹设置为参数%%A
,然后使用它来更改目录(使用pushd
)运行我们的嵌套命令。
第二个FOR
循环是/f
,它将循环显示命令结果-在这种情况下,命令为dir
和find
。对于dir
,我们指定/a
以显示-d
不是文件夹的所有文件,-s
系统文件或-h
隐藏的文件,并显示它们以/b
裸格式输出。使用dir
的输出,我们运行find
并指定/v
显示所有非空行,然后/c
计算数字-成为参数%%B
最后,我们将%%B
设置为计数变量(cnt
)-如果!cnt!
等于2
,我们将查看新目录中是否已存在该文件夹,如果没有,我们将其自动复制。 move命令给我带来了一些麻烦,因为该文件夹将被循环锁定,因此如果您愿意,还可以使用DEL
命令删除原始文件夹。
让我知道是否有帮助!希望您的研究进展顺利。