[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. set "txtPath1=C:\Users\CH6\Desktop\TEDTXTUNICODE\eng1246"
  4. set "txtPath2=C:\Users\CH6\Desktop\TEDTXTUNICODE\chs1203"
  5. for /f "delims=" %%i in ('dir /b/l/aa %txtPath1%\*.txt') do (
  6. for /f "delims=" %%a in ('dir /b/l/aa %txtPath2%\*.txt') do (
  7. if "%%i"=="%%a" (
  8. echo,%%i %%a 组合后。
  9. for /f "usebackq tokens=1,* delims=:" %%t in (`findstr /n "." "%txtPath1%\%%i"`) do (
  10. for /f "usebackq tokens=1,* delims=:" %%c in (`findstr /n "." "%txtPath2%\%%a"`) do (
  11. if "%%c"=="%%t" echo,%%u %%d
  12. )
  13. )
  14. )
  15. )
  16. )
  17. pause
复制代码
踏实一些点.不要着急.你想要的时间都会给你.2

TOP

本帖最后由 523066680 于 2018-1-30 09:01 编辑

回复 4# allenyzq147


    你需要把

my $path_eng = '.\TEDTXTUNICODE\eng1246';
my $path_chs = '.\TEDTXTUNICODE\chs1203';
my $path_merge = '.\TEDTXTUNICODE\merge';

这三行的路径改成你自己的,以及按你更新后的需求,最好是打包几个eng和chn的文件样本发上来,或者完整的打包发到网盘。
不然别人帮你解决问题,还得自己模拟文件环境,自己测试自己校验,最后发现需求改了?

TOP

回复 3# yhcfsr

感谢你了,这位哥哥。文件已成功合并。不然一千多份文件,一行一行,非要了我的小命。

可是,由于我提问之前考虑不够周全,出现了新的问题:行号、时间轴、还有空行,这3行都是不需要的。
只要留一行一行的英文和中文的文字就可以了。

能不能麻烦哥哥你,
再给写个脚本把merge文件夹里所有的文本里的 行号、时间轴、空行 都给删除
或者把刚才的脚本给改一下,我重新合并也可以。

再次感谢!

刚才合并后的每一个新文本,都是下面这样的格式,随机打开了一个,随机复制了几行:

11 11
00:00:39,000 --> 00:00:41,000 00:00:39,000 --> 00:00:41,000
We didn't know 我们不知道

12 12
00:00:41,000 --> 00:00:43,000 00:00:41,000 --> 00:00:43,000
if he had perished yet 是否他还活着

13 13
00:00:43,000 --> 00:00:46,000 00:00:43,000 --> 00:00:46,000
until 36 hours later. 直到事发36小时之后。

最终结果需要是下面的样子:

We didn't know 我们不知道
if he had perished yet 是否他还活着
until 36 hours later. 直到事发36小时之后。

TOP

本帖最后由 allenyzq147 于 2018-1-29 23:36 编辑

回复 2# 523066680


    感谢您的回答。

    大神好眼力啊。的确是字幕文件,我是用来做语料库的。

    第一次运行Perl脚本
    我安装了StrawberryPerl,运行脚本后,只生成了一个TEDTXTUNICODE文件夹,这个文件夹下面有一个空的merge文件夹。
    是不是我装的软件不对.

TOP

PowerShell
保存为ps1扩展名文件,右键单击脚本,以powershell运行
未对powershell进行过设置的,可以管理员身份运行CMD,复制此命令到命令提示符 powershell -c "set-executionpolicy unrestricted" 以解除脚本限制
WIN10以下系统如出错,可能需要去微软官网下载补丁升级powershell

根据5楼的要求,更新了下代码
  1. $SD_eng=Get-ChildItem -Path "C:\Users\CH6\Desktop\TEDTXTUNICODE\eng1246"
  2. $SD_chs=Get-ChildItem -Path "C:\Users\CH6\Desktop\TEDTXTUNICODE\chs1203"
  3. $OD_merge="C:\Users\CH6\Desktop\TEDTXTUNICODE\merge"
  4. foreach($file_eng in $SD_eng){
  5.      $content=$content_eng=$content_chs=$null;
  6.      foreach($file_chs in $SD_chs){
  7.         if($file_eng.name -eq $file_chs.name){
  8.             $content_eng=Get-Content -Path $file_eng.FullName;
  9.             $content_chs=Get-Content -Path $file_chs.FullName;
  10.             break;
  11.         }#if
  12.       }#for2  
  13.       if(($content_eng.Count-$content_chs.Count) -ge 0){$count=$content_eng.Count}else{$count=$content_chs.Count;}
  14.      for($i=2;$i -le $count;$i+=4){
  15.         if ($content_eng[$i-2] -ne $content_chs[$i-2]){-join('文件',$file_eng.name,"`t在第",(($i-2)/4+1),'行号不对应');}
  16.         if ($content_eng[$i-1] -ne $content_chs[$i-1]){-join('文件',$file_eng.name,"`t在第",(($i-2)/4+1),'时间轴不对应');}
  17.         if(!($content_eng[$i])){-join('文件',$file_eng.name,"`t在第",(($i-2)/4+1),'无英文字幕');}
  18.         if(!($content_chs[$i])){-join('文件',$file_eng.name,"`t在第",(($i-2)/4+1),'无中文字幕');}
  19.         $content+=-join($content_eng[$i]," ",$content_chs[$i]+"`r`n");
  20.       }
  21.       if($content){$OF_name=$OD_merge+'\'+$file_eng.name;$content|Out-File -FilePath $OF_name;}
  22. }
  23. pause;
复制代码

TOP

本帖最后由 523066680 于 2018-1-30 10:06 编辑

字幕?

Perl

2018-01-30 更新

      use File::Slurp;
      use File::Basename;
      use Term::ReadKey;
      STDOUT->autoflush(1);

      chdir '.\TEDTXTUNICODE' or
      chdir 'C:\Users\CH6\Desktop\TEDTXTUNICODE' or quit( $! );
      my $path_eng = '.\eng1246';
      my $path_chs = '.\chs1203';
      my $path_merge = '.\merge';

      mkdir $path_merge unless -e $path_merge;

      my ($en, $cn, $merge);
      for my $cn ( glob "$path_chs\\*.txt" )
      {
          $en = "$path_eng\\". basename($cn);
          $merge = "$path_merge\\". basename($cn);
          merge( $en, $cn, $merge ) if ( -e $en );
      }
      quit("Done");

      sub merge
      {
          my ( $en, $cn, $merge ) = @_;
          my @arr = read_file( $en );
          my @brr = read_file( $cn );
          my @mix;
          grep
          {
              $arr[$_] =~s/\r?\n//;
              $arr[$_] .= " ". $brr[$_]
          }
          ( 0 .. $#arr );

          @mix = grep { ( /^\d+\s+\d+$/ or /\d+:\d+:\d+/ or /^\s+$/ ) ? 0 : 1 } @arr;
          write_file( $merge, @mix );
          print "$merge\n";
      }

      sub quit
      {
          print $_[0];
          ReadKey -1;
          exit;
      }

TOP

返回列表