windows - 如何在文件夹的每个子目录中执行命令?
问题描述
我有一个文件夹,其中包含更多文件夹。
我希望将某个“级别”的所有文件上移一个。
例如我有:
- ParentFolder\Actor1\Movie\HighRes\HighresMovie.mp4
- 父文件夹\Actor1\Movie\LowresMovie.mp4
- ParentFolder\Actor2\Movie\HighRes\HighresMovie.mp4
- 父文件夹\Actor2\Movie\LowresMovie.mp4
但我希望它看起来像:
- ParentFolder\Actor1\Movie\HighresMovie.mp4
- 父文件夹\Actor1\Movie\LowresMovie.mp4
- ParentFolder\Actor2\Movie\HighresMovie.mp4
- 父文件夹\Actor2\Movie\LowresMovie.mp4
这是一个包含大约 1000 个“演员”文件夹的大型文件夹。
我目前有这个命令行命令部分工作:
for /f "delims==" %i in ('dir /a:d /b') do for /f "delims==" %f in ('dir "%i" /a:d /b') do (move "%i\%f\*.*" "%i"&&rd "%i\%f" /s /q)
我可以从“Actor”文件夹中的命令行运行这个命令,它完全符合我的要求。现在我希望能够从“ParentFolder”运行它,并将相同的命令应用于我拥有的每个“Actor”文件夹。
解决方案
这将获取$TopDir
树中匹配*.mp4
并HighRes
在路径名中具有的文件列表。然后它遍历列表,获取父目录名称,并将文件移动到该父目录。
-WhatIf
当你准备好真正做的时候删除... [笑]
$TopDir = "$env:TEMP\ParentFolder"
$Filter = '*.mp4'
$SourceDir = 'HighRes'
$MoveFileList = Get-ChildItem -LiteralPath $TopDir -Filter $Filter -Recurse -File |
Where-Object {$_.DirectoryName -match $SourceDir}
foreach ($MFL_Item in $MoveFileList)
{
$DestDir = Split-Path -Path $MFL_Item.DirectoryName -Parent
Move-Item -LiteralPath $MFL_Item.FullName -Destination $DestDir -WhatIf
}
输出 [重新格式化以更易于阅读] ...
What if: Performing the operation
"Move File"
on target
"Item: C:\Temp\ParentFolder\Actor1\Movie\HighRes\HighresMovie.mp4
Destination: C:\Temp\ParentFolder\Actor1\Movie\HighresMovie.mp4".
What if: Performing the operation
"Move File"
on target
"Item: C:\Temp\ParentFolder\Actor2\Movie\HighRes\HighresMovie.mp4
Destination: C:\Temp\ParentFolder\Actor2\Movie\HighresMovie.mp4".
推荐阅读
- r - 根据 grep() 中的行值创建标志
- r - 在两个多面ggplots之一中反转x轴
- python - Django REST API 和 React Native 中的登录和身份验证功能
- richfaces - X-Frame-Options 标头不包含在 ajax4jsf 和 Richfaces 的 HTTP 响应中
- python - 为什么 Python 2.7 报告的上限值不正确?
- git - git svn 克隆特定分支并合并
- javascript - java脚本alexa技能包数组问题
- javascript - 文件路径在 Safari 和 Chrome 中的处理方式不同?
- visual-studio-code - 将 vscode 扩展作为 npm 包使用
- sorting - 仅列级别的 ag-grid 排序比较器