@@ -18,6 +18,11 @@ public class Settings : CommandSettings
1818 [ Description ( "输出文件路径(仅单文件时可用)" ) ]
1919 public string ? Output { get ; set ; }
2020
21+ [ CommandOption ( "-f|--force" ) ]
22+ [ Description ( "覆盖已存在的输出文件" ) ]
23+ [ DefaultValue ( false ) ]
24+ public bool Force { get ; set ; }
25+
2126 public override ValidationResult Validate ( )
2227 {
2328 if ( Sources . Length == 0 )
@@ -50,11 +55,23 @@ public override async Task<int> ExecuteAsync(CommandContext context, Settings se
5055 {
5156 var source = settings . Sources [ 0 ] ;
5257 var output = settings . Output ?? Path . ChangeExtension ( source , ".mp4" ) ;
58+
59+ if ( ! settings . Force && File . Exists ( output ) )
60+ {
61+ AnsiConsole . MarkupLine ( $ "[red]✗ 输出文件已存在: { output } (使用 --force 覆盖)[/]") ;
62+ return 1 ;
63+ }
64+
5365 await ConvertSingleFile ( source , output ) ;
5466 }
5567 else
5668 {
57- await ConvertMultipleFiles ( settings ) ;
69+ var errorCount = await ConvertMultipleFiles ( settings ) ;
70+ if ( errorCount > 0 )
71+ {
72+ AnsiConsole . MarkupLine ( $ "[yellow]⚠ 转换完成,{ errorCount } 个文件失败(使用 --force 覆盖已存在的文件)[/]") ;
73+ return 1 ;
74+ }
5875 }
5976
6077 AnsiConsole . MarkupLine ( "[green]✓ 所有转换已成功完成![/]" ) ;
@@ -101,10 +118,11 @@ await VideoConvert.ConvertUsmToMp4(
101118 AnsiConsole . MarkupLine ( $ "[green]✓ 已保存到: { output } [/]") ;
102119 }
103120
104- private async Task ConvertMultipleFiles ( Settings settings )
121+ private async Task < int > ConvertMultipleFiles ( Settings settings )
105122 {
106123 AnsiConsole . MarkupLine ( $ "[yellow]正在转换 { settings . Sources . Length } 个文件...[/]") ;
107124
125+ int doneCount = 0 , errorCount = 0 ;
108126 await AnsiConsole . Progress ( )
109127 . AutoClear ( false )
110128 . Columns (
@@ -114,13 +132,21 @@ await AnsiConsole.Progress()
114132 new SpinnerColumn ( ) )
115133 . StartAsync ( async ctx =>
116134 {
117- int doneCount = 0 , errorCount = 0 ;
118135 foreach ( var source in settings . Sources )
119136 {
120137 var output = Path . ChangeExtension ( source , ".mp4" ) ;
121138 var task = ctx . AddTask ( $ "[green]{ Path . GetFileName ( source ) } [/]") ;
122139 task . MaxValue = 100 ;
123140
141+ if ( ! settings . Force && File . Exists ( output ) )
142+ {
143+ errorCount ++ ;
144+ task . Description = $ "[red]{ Path . GetFileName ( source ) } - 输出文件已存在[/]";
145+ task . Value = 100 ;
146+ task . StopTask ( ) ;
147+ continue ;
148+ }
149+
124150 if ( errorCount > 0 )
125151 {
126152 TerminalProgress . Set ( TerminalProgress . Status . Warning , ( errorCount + doneCount ) * 100 / settings . Sources . Length ) ;
@@ -152,5 +178,7 @@ await VideoConvert.ConvertUsmToMp4(
152178 }
153179 TerminalProgress . Clear ( ) ;
154180 } ) ;
181+
182+ return errorCount ;
155183 }
156184}
0 commit comments