Board logo

标题: [文本处理] BAT如何批量将文本标题以符号为分割随机插入到txt文本内容中? [打印本页]

作者: yong8723    时间: 2019-4-23 21:48     标题: BAT如何批量将文本标题以符号为分割随机插入到txt文本内容中?

文件夹有n个txt文本

测试1,文本.txt

测试2,文本.txt

。。。。。。

实现效果样式

测试1,文本.txt内容

西宁号驱逐舰属于我国自主研制的052D型导弹驱逐舰之一,技战术测试1内容指标世界先进。此外,去年4月我国的南海大阅兵中,习近平检阅海军所用的检阅舰为长沙舰,同样也文本是052D型导弹驱逐舰。


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

测试1,文本.txt内容

西宁号驱逐舰属于我国自主研制的052D型导弹驱逐舰之一,技战术测试2内容指标世界先进。此外,去年4月我国的南海大阅兵中,习近平检阅海军所用文本的检阅舰为长沙舰,同样也是052D型导弹驱逐舰。



随机插入位置不用考虑,每次个文本随机插入2次(次数可调)
作者: zaqmlp    时间: 2019-4-23 23:21

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. cd /d "%~dp0"
  6. set "次数=2"
  7. set "output=结果"
  8. md "%output%" 2>nul
  9. powershell ^
  10.     dir *.txt^|?{$_ -is [System.IO.FileInfo]}^|%%{^
  11.         write-host $_.Name;^
  12.         $arr=$_.BaseName.split(',');^
  13.         $text=[IO.File]::ReadAllText($_.FullName, [Text.Encoding]::Default);^
  14.         [System.Collections.ArrayList]$char=$text.toCharArray();^
  15.         for($i=0;$i -lt %次数%;$i++){^
  16.             $n=0;while($n -lt $arr.Count){^
  17.                 $r=get-random @(0..($text.length-1));^
  18.                 if(($r -eq 0) -or ((@(\"`r\",\"`n\") -notcontains $char[$r]) -and (@(\"`r\",\"`n\") -notcontains $char[$r-1]))){^
  19.                     $char[$r]+=$arr[$n];^
  20.                     $n++;^
  21.                 };^
  22.             };^
  23.         };^
  24.         out-file -file ('%output%\'+$_.Name) -input ($char -join '') -enc Default;^
  25.     }
  26. echo;%info%
  27. pause
复制代码

作者: yong8723    时间: 2019-4-24 14:25

回复 2# zaqmlp


    好的,我试试,可以的话发个小红包感谢
作者: yong8723    时间: 2019-4-24 14:31

回复 2# zaqmlp


不行哦,只是生成个结果文件夹,里面没有内容
作者: zaqmlp    时间: 2019-4-24 15:30

本帖最后由 zaqmlp 于 2019-4-24 15:32 编辑

回复 4# yong8723

bat跟txt放一起运行,无法得知你的实际情况,加我Q
作者: Batcher    时间: 2019-4-24 15:31

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "folder=结果"
  4. if not exist "%folder%" (
  5.     md "%folder%"
  6. )
  7. set interval=5
  8. for %%a in (*.txt) do (
  9.     for /f "tokens=1-2 delims=," %%b in ("%%~na") do (
  10.         set "ins1=%%b"
  11.         set "ins2=%%c"
  12.     )
  13.     set /p line=<"%%a"
  14.     call :StrLen !line!
  15.     call :RandGen offset1
  16.     set /a offset2=offset1+interval
  17.     call :StrInsert !offset1! %interval% !offset2! > "%folder%\%%a"
  18. )
  19. goto :eof
  20. :StrLen
  21. set StrMAX=100
  22. for /l %%i in (0,1,%StrMAX%) do if "!line:~%%i,1!"=="" set num=%%i&goto :eof
  23. :RandGen
  24. set /a %1=%random%%%!num!
  25. goto :eof
  26. :StrInsert
  27. echo !line:~0,%1!!ins1!!line:~%1,%2!!ins2!!line:~%3!
  28. goto :eof
复制代码

作者: yong8723    时间: 2019-4-24 16:47

回复 5# zaqmlp

比如:txt文本:111,2222,3333.txt ;文件名:111,2222,3333


随机把111,2222,3333分开插入到txt文本里面,不用删除里面原本的内容,第个数据插入2次(次数可以调)
作者: yong8723    时间: 2019-4-24 16:51

回复 6# Batcher

这个只能插入一次,还有一个问题,这个脚本把第一段落以后的内容全部删除了
作者: yong8723    时间: 2019-4-24 16:51

回复 5# zaqmlp
我已经加你qq了
作者: yong8723    时间: 2019-4-24 16:59

回复 5# zaqmlp
作者: Batcher    时间: 2019-4-24 17:10

回复 8# yong8723


修复_第一段落以后的内容全部删除了.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "folder=结果"
  4. if not exist "%folder%" (
  5.     md "%folder%"
  6. )
  7. set interval=5
  8. for %%a in (*.txt) do (
  9.     for /f "tokens=1-2 delims=," %%b in ("%%~na") do (
  10.         set "ins1=%%b"
  11.         set "ins2=%%c"
  12.     )
  13.     set /p line=<"%%a"
  14.     call :StrLen !line!
  15.     call :RandGen offset1
  16.     set /a offset2=offset1+interval
  17.     call :StrInsert !offset1! %interval% !offset2! > "%folder%\%%a"
  18.     (for /f "skip=1" %%b in ('type "%%a"') do (
  19.         echo,%%b
  20.     ))>>"%folder%\%%a"
  21. )
  22. goto :eof
  23. :StrLen
  24. set StrMAX=100
  25. for /l %%i in (0,1,%StrMAX%) do if "!line:~%%i,1!"=="" set num=%%i&goto :eof
  26. :RandGen
  27. set /a %1=%random%%%!num!
  28. goto :eof
  29. :StrInsert
  30. echo !line:~0,%1!!ins1!!line:~%1,%2!!ins2!!line:~%3!
  31. goto :eof
复制代码

作者: yong8723    时间: 2019-4-24 17:16

回复 11# Batcher


    现在前面的数据又删除的,而且也不能提取标题数据插入文本中,插入次数能不能控制呢,想让他插入多少次都行,这个脚本好像只能插入1次
作者: Batcher    时间: 2019-4-24 17:25

回复 12# yong8723


    11楼代码你再重新测试一下
作者: yong8723    时间: 2019-4-27 15:49

本帖最后由 yong8723 于 2019-4-27 15:51 编辑

回复 13# Batcher

      文本标题:测试,22222,3333333333.txt
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
          <p>而今,正在霸州工业新城内,一个个高端优质项目风起云涌、加疾设立的施工厂面,让人琳琅满目、倍感昂扬。抢抓都邑食物工业发生式延长的新时机,霸州工业新城都邑食物工业勉力...</p>
            <div>
              <hr />
            </div>
            <div class="post-image"><p>
        <img src="http://www.xxx.com.cn/2018/0509/1525858579852.png" /></p>
<p>



、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

下面这个bat脚本,随机调用以,符号分割标题插入到文本内容中,已经实现,但一个有问题,随机插入到文本内容的时候,他会随机插入到html标签内,导致html标签不完整,所以图片,链接,还有其它html标签失效,如:
<img 测试src="http://www.xxxx.com.cn/2018/05测试09/152585852222279852.png"

<a href="http://www.xx测试xnet/thread-10403-1-1.html"

<div3333333333>


能不能以下面这个脚本修改调用标题只随机插入到“中文”之间,这样就不会导致html标签失效,谢谢

@powershell -NoProfile -ExecutionPolicy bypass "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]:efault))").Invoke()}" & pause & exit
$cishu=3;
$output='结果';
[void](md $output -force);
dir *.txt|?{$_ -is [System.IO.FileInfo]}|%{
    write-host $_.Name;
    $arr=$_.BaseName.split(',',[StringSplitOptions]::RemoveEmptyEntries);
    $text=[IO.File]::ReadAllText($_.FullName, [Text.Encoding]::Default);
    [System.Collections.ArrayList]$char=$text.toCharArray();
    for($i=0;$i -lt $cishu;$i++){
        $n=0;while($n -lt $arr.Count){
            $r=get-random @(0..($text.length-1));
            if(($r -eq 0) -or ((@("`r","`n") -notcontains $char[$r]) -and (@("`r","`n") -notcontains $char[$r-1]))){
                $char[$r]+=$arr[$n];
                $n++;
            };
        };
    };
    out-file -file ($output+'\'+$_.Name) -input ($char -join '') -enc Default;
}




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2