繁体   English   中英

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

[英]Batch file that looks for a folder that contains 1 file

我有很多文件夹,里面有随机数量的文件。 而且大多数文件中只有1个文件,这些文件需要移动到父文件夹中。 但我不知道该如何使用批处理文件。

我使用Windows 7 Ultimate

@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开始的所有子目录名称,然后依次将nm分配给%%a

然后仅检查每个目录的文件名; 2>nul禁止显示空目录的错误消息,并提供dir命令的输出以find 匹配""的行数(/ c)(即计算目录的行数=#个文件)回来)。 这适用于%%c

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

所需的MOVE命令仅仅ECHO编用于测试目的。 确认命令正确无误后 ,将ECHO(MOVE更改为MOVE即可实际移动文件。Append >nul可禁止报告消息(例如,已1 file moved

此解决方案不使用任何外部.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"
)

您有许多文件夹,其中所有文件夹可能包含或可能不包含文件,并且要将所有文件移动到其他目录吗?

PowerShell是使用批处理文件的新的和改进的超级收费版本,这是您将执行的操作。

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

    dir-递归C:\\ FolderContainingManySubfolder | PSIsContainer | dir-递归| move-item-目的地T:\\ somePath -WhatIf

将C:\\ FolderContainingManySubfolder替换为包含所有其他文件夹且每个文件夹都包含一个或两个项目的文件夹,然后将T:\\ somePath替换为您要放置单个文件的位置。

运行它,您将看到很多“如果...”输出,向您显示如果运行该命令会发生什么。 如果对所看到的内容满意,则从末尾删除-WhatIf参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM