Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 是否可以使用批处理文件执行此操作?_Batch File - Fatal编程技术网

Batch file 是否可以使用批处理文件执行此操作?

Batch file 是否可以使用批处理文件执行此操作?,batch-file,Batch File,在我开始发布代码之前,我想知道这是否可行 我有一个文件夹目录,需要移动到新目录。 但我只需要移动其中仅包含2个文件的文件夹。 其余文件夹中有2个以上的文件,但它们需要保留。 那么这对批处理文件是否可行呢?这很有趣,所以我尝试了一下: @echo off set "dir=C:\Your\Current\Directory" set "ndir=C:\Your\New\Directory" setlocal enabledelayedexpansion for /d %%A in (%dir%

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

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

这很有趣,所以我尝试了一下:

@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
)的值将在循环迭代之间更改。循环的第一个
/d
,它将在文件夹中循环-我们将每个文件夹设置为参数
%%A
,并使用该参数在运行嵌套命令之前更改目录(使用
pushd

的第二个
循环是
/f
,它将通过命令结果进行循环-本例中的命令是
dir
find
。对于
dir
我们指定
/a
来显示
-d
不是文件夹、
-s
系统文件或
-h
隐藏文件的所有文件,并且以
/b
裸格式显示该输出。使用
dir
的输出,我们运行
find
并指定
/v
显示所有非空行,然后
/c
计算数字-这将成为参数
%b

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

如果有帮助,请告诉我!希望你的研究进展顺利


参考资料:,,,

是的,这是可行的。一旦你研究、编写和测试了你的代码,如果它不能按预期的方式工作,就需要为它所展示的问题寻求具体的帮助。