批处理文件可以吗?

时间:2019-07-06 22:45:22

标签: batch-file

在我开始发布代码之前,我想知道这是否可行。

我有一个文件夹目录,需要移动到新目录。 但是我只需要移动其中仅包含2个文件的文件夹。 其余的文件夹中有两个以上的文件,但它们需要保留。 那么使用批处理文件可行吗?

1 个答案:

答案 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,它将循环显示命令结果-在这种情况下,命令为dirfind。对于dir,我们指定/a以显示-d不是文件夹的所有文件,-s系统文件或-h隐藏的文件,并显示它们以/b裸格式输出。使用dir的输出,我们运行find并指定/v显示所有非空行,然后/c计算数字-成为参数%%B

最后,我们将%%B设置为计数变量(cnt)-如果!cnt!等于2,我们将查看新目录中是否已存在该文件夹,如果没有,我们将其自动复制。 move命令给我带来了一些麻烦,因为该文件夹将被循环锁定,因此如果您愿意,还可以使用DEL命令删除原始文件夹。

让我知道是否有帮助!希望您的研究进展顺利。

参考:Counting FilesFOR LoopingpushdDIRFINDrobocopy