我当前的文件夹结构如下:
E:\Videos\Movies\Random Folder Name\Subs\Random File Name.srt
我想将我的.srt
文件上移一级,如下所示:
E:\Videos\Movies\Random Folder Name\Random File Name.srt
我希望这是一个.bat
文件,但我愿意使用PowerShell。
〜EDIT〜
我在网上找到了部分可行的内容并根据我的需要对其进行了编辑:
@echo off
set thisdir=%cd%
for /f "delims=" %%A in ('dir /b /ad') do (
cd /d "%%~dpnA"
for /f "delims=" %%B in ('dir /b /ad') do (
echo Level 2 Directory: %%~dpnB
cd /d "%%~dpnB"
for /f "delims=" %%C in ('dir /b /ad') do (
echo Level 3 Directory: %%~dpnC
cd /d "%%~dpnC"
move *.srt ..\
cd..
rd "%%~dpnC"
)
)
)
这是有效的,但只有第一个文件夹,我似乎无法使2级递归,因为这是随机电影名称的级别。我尝试用for /替换为/ f,但这是不行的。
答案 0 :(得分:2)
这是一个单行:
forfiles /m *.srt /s /c "cmd /c move @file .."
答案 1 :(得分:1)
完整代码(您现在可以从任何驱动器运行此代码):
@echo off
cd /d E:\Videos\Movies\
for /r %%i in (*.srt) do move "%%~dpnxi" "%%~dpi.."
pause
这将查找类型为.srt
且move
的所有文件到-1目录中找到的文件夹(%%~dpi
是找到它的目录,添加{{ 1}}到路径会移除最后一个目录,因此..
会将您置于C:\Users\..
)
PS :这次我对此进行了测试,并且有效。
答案 2 :(得分:0)
虽然已经给出了答案,但我仍然想尝试找出如何根据我的确切需求完善代码。无法通过CMD实现这一目标,所以我查看了powershell(由于某些原因我更容易理解)并对此进行了编码:
$sourcefolder = "F:\Videos\Movies\*\Subs\"
$files = Get-ChildItem -Recurse $sourcefolder | where {$_.PSIScontainer -eq $false}
foreach ($file in $files)
{
$destinationFolder = Split-Path -Parent $file.Directory.FullName
move-item $file.FullName $destinationFolder
}
它没有指定.srt文件,但它们是该文件夹中唯一的扩展名。谢谢你的帮助!