查找包含1个文件的文件夹的批处理文件

时间:2015-02-03 21:49:54

标签: windows file batch-file directory

我有很多文件夹,其中包含随机数量的文件。 其中大多数只有1个文件,这些文件需要移动到父文件夹。但是我不知道如何用批处理文件来做这件事。

我使用Windows 7 Ultimate

3 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /d /r "%sourcedir%" %%a IN (*) DO (
 FOR /f %%c IN ('dir /b/a-d "%%a\*.*" 2^>nul ^|find /c /v ""') DO IF %%c==1 ECHO(MOVE "%%a\*.*" "%%a\..\"
)

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

for /d /r查找从sourcedir开始的所有子目录名称,并依次将{m}分配给%%a

然后检查每个目录的文件名; 2>nul抑制空目录的错误消息,dir命令的输出被馈送到find,它计算(/ c)不要' t 匹配""(即计算目录行=返回的#个文件)。这适用于%%c

如果%%c为1,则将所有(一个)文件从目录移动到其父目录。

为了测试目的,所需的MOVE命令仅为ECHO在您确认命令正确后,将ECHO(MOVE更改为MOVE以实际移动文件。附加>nul以取消报告消息(例如1 file moved

答案 1 :(得分:0)

此解决方案不使用任何外部.exe命令,因此它应该运行得更快。此外,我认为很明显,没有任何问题可以理解......

@echo off
setlocal EnableDelayedExpansion

for /D %%d in (*) do (
   set "firstFile="
   set "moreThanOneFile="
   for %%f in ("%%d\*.*") do (
      if not defined firstFile (
         set "firstFile=%%f"
      ) else (
         set "moreThanOneFile=true"
      )
   )
   if not defined moreThanOneFile move "!firstFile!" "%%d"
)

答案 2 :(得分:-2)

您有多个文件夹,其中可能包含或不包含文件,您想将所有文件移动到其他目录?

PowerShell是使用批处理文件的新的改进的超级版本,这就是你要做的。

  1. 运行PowerShell
  2. 粘贴在以下

    dir -Recurse C:\ FolderContainingManySubfolder | ? PSIsContainer | dir -Recurse | move-item -Destination T:\ somePath -WhatIf

  3. 将C:\ FolderContainingManySubfolder替换为包含所有其他文件夹的文件夹,每个文件夹各有一个或两个项目,并将T:\ somePath替换为您希望单个文件所在的位置。

    运行它,你会看到很多'What If'输出,它会告诉你如果要运行命令会发生什么。如果您对所看到的内容感到满意,请从结尾删除-WhatIf参数。