在Windows中,双击视频文件后,当它完成时,我希望文件向上移动一个目录或2,并删除任何包含文件夹。
我只希望这会影响位于C:\Users\User1\Downloads
的文件,例如%x%
。
有两种情况:
如果文件为%x%\Training.4273865.2013.avi
,则应将其移至..\Viewed\
。
如果文件为%x%\Showcase\SomeFile.mp4
,则应将其移至同一文件夹:..\..\Viewed\
。然后应删除Showcase
文件夹。目前,我必须在Showcase
之前关闭VLC(关闭文件句柄)(并且它的其他内容)可以删除。
c#解决方案会很好,但我不介意我可以用visual-studio-2012或类似的开源编译器编译任何语言。
答案 0 :(得分: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
答案 1 :(得分: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);
}
}
}
我在this question中找到了IsSubfolder
的代码。