我有很多文件夹,其中包含随机数量的文件。 其中大多数只有1个文件,这些文件需要移动到父文件夹。但是我不知道如何用批处理文件来做这件事。
我使用Windows 7 Ultimate
答案 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是使用批处理文件的新的改进的超级版本,这就是你要做的。
粘贴在以下
中dir -Recurse C:\ FolderContainingManySubfolder | ? PSIsContainer | dir -Recurse | move-item -Destination T:\ somePath -WhatIf
将C:\ FolderContainingManySubfolder替换为包含所有其他文件夹的文件夹,每个文件夹各有一个或两个项目,并将T:\ somePath替换为您希望单个文件所在的位置。
运行它,你会看到很多'What If'输出,它会告诉你如果要运行命令会发生什么。如果您对所看到的内容感到满意,请从结尾删除-WhatIf参数。