![](/img/trans.png)
[英]Windows10/powershell: how to count files and then sort them by subfolders?
[英]Flatten Files in Subfolders on Windows 7 (cmd or PowerShell)
我有大量的文件组织在一个非常分层的文件夹结构中。 在此结构中,我关心的文件始终位于文件夹的最低级别。 因此,我想展平目录,以便更容易访问我关心的文件。 但是,我想保留文件夹结构的2个更高级别(Person&Project)。
以下是EXISTING文件夹目录的示例:
以下是DESIRED文件夹目录的示例:
我尝试过这样的事情,但是这会将所有文件压缩成一个目录:
for /r %f in (*) do @copy "%f" .
但是,这会产生:
我很感激您提供的任何指导。 非常感谢!
在那个有效的循环周围抛出几个额外的循环。
例如,首先更改为名称文件夹,然后是项目文件夹,循环遍历两个级别。
for /D %n in (*) do (
pushd %n
for /D %p in (*) do (
pushd %p
for /r %f in (*) do @copy "%f" .
popd
)
popd
)
如果你把它放在一个bat文件中,记得用%%替换%
这是一个Powershell方法。 它获取所需级别的文件夹列表。 然后它将所有子文件移动到该级别。 它还将删除子文件夹。
$Rootfolder = Dir directory\*\* -Directory
ForEach($folder in $Rootfolder)
{
Dir $folder.fullname -Recurse -File | Copy-Item -Destination $folder.fullname
Dir $folder.fullname -Recurse -Directory | Remove-Item -Force -Recurse -WhatIf
}
如果要删除它,请从最后一行删除-WhatIf。
@echo off
pushd yourDirectory
for /d %%A in (*) do for /d %%B in ("%%A\*") do for /d %%C in ("%%B\*") do (
pushd "%%C"
for /r %%F in (*) do move /y "%%F" "%%B" >nul
popd
rd /q /s "%%C"
)
popd
%% A包含类似“yourDirectory \\ Tom”的内容
%% B包含类似“yourDirectory \\ Tom \\ Project 1”的内容
%% C包含类似“yourDirectory \\ Tom \\ Project 1 \\ subdirectory1”的内容%% F包含要移动到任何深度的文件
起初我以为我可以消除PUSHD / POPD并使用
for /r "%%C" %%F in (*) do ... THIS DOES NOT WORK
但这不起作用 - / R之后的值不能使用FOR变量或延迟扩展,因为解析命令的方式。
我调整了@ ScottC的答案并使用了以下代码:
for /D %%n in (*) do (
pushd %%n
for /D %%p in (*) do (
pushd %%p
for /r %%f in (*.ppt) do (
move "%%f" "[ROOT_PATH_THAT_I_WANT]\%%n\%%p".
)
popd
)
popd
)
我将此解决方案作为.bat文件运行,这就是我使用%%而不是%的原因。
%% n = name(又名C:\\ Directory \\ Name)
%% p =项目(又名C:\\ Directory \\ Name \\ Project)
%% f =要移动的文件(递归浏览文件夹并将它们移动到项目级别)
最终,我无法得到@ dbenham关于删除空文件夹的建议,所以我最终使用了这个实用工具: http : //www.jonasjohn.de/red.htm 。 到目前为止它看起来非常直观,就像它在没有我太多努力的情况下处理问题:)
感谢大家的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.