将文件夹内容批量上移一级

将文件夹内容批量上移一级

在某些情况下,这是一项简单的任务,但我想要将数百个文件夹中的数千个文件移动。

目录结构如下:

C:\Photos\subject\randomnumbers\images\file.ext

最后我想说:

C:\Photos\subject\randomnumbers\file.ext

我尝试运行for /r %i in ("*\images\*.*") do move *\*.*但它没有按预期工作。

除了手动操作,我想不出还有其他方法可以做到这一点。虽然手动操作可以工作,但如果我可以根据需要启动自动化操作,我会受益匪浅。

这是可能的,有人可以帮助我吗?

答案1

这应该对你有用:

for /r %i in ("images\*.*") do move %i %~pi..
  • %~pi从中提取路径%i(以 结尾\
  • ..放在上述路径后面指向父目录

当然,它不能处理子目录中文件名称冲突的情况。

答案2

这不是很复杂,我相信人们会想出更好的解决方案,但这里有一个快速的解决方案:

  1. 在资源管理器中简单搜索*,从您要移动内容的文件夹开始。可能需要半分钟左右才能完成。
  2. 按路径对结果进行排序
  3. 选择所有尚未位于目标文件夹中的文件(即您想要移动的文件)(这些文件将是您现有的“数千个目录”)。排序后它们将全部放在一起,因此“单击”和“shift +单击”即可完成。
  4. 将它们拖入左侧的文件夹体系结构树中,然后放入目标文件夹中。
  5. 在移动过程中喝杯咖啡或做些其他工作。Windows 通常每秒可以移动 40 - 7000 个文件,具体取决于您的硬件。
  6. 选择所有现在为空的目录并将其删除。

请注意,您也可以执行步骤 1带有过滤器如果您只想要某些文件类型,例如*.jpg,*.png

答案3

将文件夹内容批量上移一级

这是一个批处理解决方案,其中移出目录是您要移动的内容所在的起始目录,移至目录是目录显式路径,这些内容将从 MoveFromDir 向上移动一级,因此您必须相应地设置这些变量。

将 MoveFromDir 及其下的所有文件夹和文件移动到 MoveToDir

请注意,仅运行第二个 FOR 循环:

  • FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.jpg"')

您可以仅指定要移动到 MoveToDir 的文件扩展名(例如 jpg)

@ECHO ON

SET MoveToDir=C:\Photos\subject\randomnumbers
SET MoveFromDir=C:\Photos\subject\randomnumbers\images

:: Move the folders from the move directory to the move to directory
FOR /D %%A IN ("%MoveFromDir%\*") DO MOVE /Y "%%~A" "%MoveToDir%"

:: Move any remaining files (or folders) from the move directory to the move to directory
FOR /F "TOKENS=*" %%A IN ('DIR /S /B "%MoveFromDir%\*.*"') DO MOVE /Y "%%~A" "%MoveToDir%\"
GOTO EOF

更多资源

答案4

电源外壳:

$source = 'C:\Photos\subject\randomnumbers\images'

Get-ChildItem $source -file | move-item -Destination {$_.Directory.Parent.Fullname}

使用通配符处理所有随机数

$source = 'C:\Photos\subject\*\images'

Get-ChildItem $source -file | move-item -Destination {$_.Directory.Parent.Fullname}

相关内容