2

在 Windows 中,双击视频文件后,完成后,我希望将文件向上移动 dir 或 2,并删除任何包含的文件夹。

我只希望这会影响位于的文件C:\Users\User1\Downloads,比如说%x%

有2种情况:

  1. 如果文件是%x%\Training.4273865.2013.avi,则应将其移至..\Viewed\.

  2. 如果文件是%x%\Showcase\SomeFile.mp4,则应将其移至同一文件夹:..\..\Viewed\. Showcase然后应删除该文件夹。目前,我必须关闭 VLC(关闭文件句柄)才能Showcase删除(以及其他内容)。

解决方案会很好,但我不介意我可以使用或类似的开源编译器编译的任何语言。

4

2 回答 2

3

您可以编写一个包装器并将其与您的媒体文件相关联。

这将间接启动 VLC,然后在它关闭后移动文件。

VLC 将流列表作为参数,附加vlc://quit到播放列表的末尾以自动退出 VLC。

用 C# 编写的包装器会更灵活,但这里有一个批量的快速示例。

set VLC=C:\Program Files\VideoLAN\VLC\vlc.exe
set FILE=Tig Notaro - Live.mp3
start "VLC" /WAIT "%VLC%" "%FILE%" vlc://quit
echo VLC has closed, I can move the file.
move "%FILE%" old/
pause
于 2013-02-12T21:45:30.927 回答
3

这是一个示例 C# 应用程序,可以执行您的要求。通过右键单击视频文件、选择打开方式并选择 C# 应用程序的可执行文件来启动它(您可以选中“始终使用所选程序打开此类文件”复选框以使更改永久生效)。

static void Main(string[] args)
{
    if (args.Length < 1)
        return;

    string vlc = @"C:\Program Files\VideoLAN\VLC\vlc.exe";
    string videoFile = args[0];
    string pathAffected = @"C:\Users\User1\Downloads";
    string destinationPath = System.IO.Directory.GetParent(pathAffected).FullName;
    destinationPath = System.IO.Path.Combine(destinationPath, @"Viewed\");

    Process vlcProcess = new Process();
    vlcProcess.StartInfo.FileName = vlc;
    vlcProcess.StartInfo.Arguments = "\"" + videoFile + "\"";
    vlcProcess.StartInfo.Arguments += " --play-and-exit";
    vlcProcess.Start();
    vlcProcess.WaitForExit();

    if (videoFile.IndexOf(pathAffected,
        StringComparison.InvariantCultureIgnoreCase) >= 0)
    {
        System.IO.File.Move(videoFile,
            System.IO.Path.Combine(destinationPath,
            System.IO.Path.GetFileName(videoFile)));

        if (IsSubfolder(pathAffected, 
            System.IO.Path.GetDirectoryName(videoFile)))
        {
            System.IO.Directory.Delete(
                System.IO.Directory.GetParent(videoFile).FullName, true);
        }
    }

}

IsSubfolder我在这个问题中找到了代码。

于 2013-02-13T15:29:20.440 回答