簡體   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