将特定扩展名移到一个目录级

时间:2016-08-16 19:27:18

标签: windows batch-file

我当前的文件夹结构如下:

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,但这是不行的。

3 个答案:

答案 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

这将查找类型为.srtmove的所有文件到-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文件,但它们是该文件夹中唯一的扩展名。谢谢你的帮助!