Board logo

标题: 【已完成】【100元】bat通过txt和其他,新增或修改csv文件 [打印本页]

作者: linfeng_321    时间: 2022-3-16 17:39     标题: 【已完成】【100元】bat通过txt和其他,新增或修改csv文件

本帖最后由 linfeng_321 于 2022-3-16 20:54 编辑

需求:通过“开始.bat”和“结束.bat”查找“1222211223\文档\文档.txt”对应参数,并将信息记录到“记录.csv”文件里
------------------------

双击“1222211223\开始.bat”时,获取“本机当前用户名”、“本机IP地址”、“名称”、“编号”、“作者”、“开始时间”、当前状态为“制作中”,插入“记录.csv”文件里。
注:“编号”是获取上一层文件夹名。

记录.csv,结果如下:
"本机当前用户名","本机IP地址","编号","名称","版本","作者","开始时间","结束时间","当前状态","制作次数"
"username","192.168.1.22","1222211223","一个小蝌蚪","二麻子","3","2022/03/16 16:47:25","","制作中","0"
------------------------

双击“1222211223\结束.bat”时,查找相同“编号”这行,将“结束时间”和“当前状态”修改成“已完成”插入“记录.csv”文件里。
注:“制作次数”是运行一次“1222211223\结束.bat”,加+1记录一次(初始值为0)

记录.csv,结果如下:
"本机当前用户名","本机IP地址","编号","名称","版本","作者","开始时间","结束时间","当前状态","制作次数"
"username","192.168.1.22","1222211223","一个小蝌蚪","二麻子","3","2022/03/16 16:48:05","","已完成","1"
------------------------

不同“编号”文件夹名,新增“记录.csv”一条数据。

相同“编号”文件夹名,修改“记录.csv”一条数据。
记录.csv,结果如下:
"本机当前用户名","本机IP地址","编号","名称","版本","作者","开始时间","结束时间","当前状态","制作次数"
"username","192.168.1.22","1222211223","一个小蝌蚪","二麻子","3","2022/03/16 16:48:05","","已完成","2"
除了“编号”数据,其他参数需要重新获取,制作次数在原有数字上“加+1”


链接:https://pan.baidu.com/s/1FzJZe3FklzUrS2qp3gfikw
提取码:hvdm
作者: zaqmlp    时间: 2022-3-16 19:50

开始
  1. <# :
  2. cls&echo off&cd /d "%~dp0"&rem 编码ANSI
  3. powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText(\"%~f0\",[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
  4. pause
  5. exit
  6. #>
  7. $csvfile=".\..\记录.csv";
  8. $txtfile=".\文档\文件.txt";
  9. $ip='null';
  10. $wmi=Get-WmiObject -Class Win32_NetworkAdapterConfiguration|?{($_.IPEnabled -eq $true) -and ($_.Description -notmatch 'Virtual')};
  11. if($wmi.IPAddress -ne $null){
  12.     $ip=$wmi.IPAddress[0];
  13. }
  14. $filename='null';
  15. $author='null';
  16. $version='null';
  17. $enc=[Text.Encoding]::GetEncoding('GB2312');
  18. if(test-path -literal $txtfile){
  19.     $text=[IO.File]::ReadAllText($txtfile, $enc);
  20.     $m=[regex]::match($text, '@名称@=([^\r\n]+)');
  21.     if($m.Success){$filename=$m.groups[1].value;}
  22.     $m=[regex]::match($text, '@作者@=([^\r\n]+)');
  23.     if($m.Success){$author=$m.groups[1].value;}
  24.     $m=[regex]::match($text, '@版本@=([^\r\n]+)');
  25.     if($m.Success){$version=$m.groups[1].value;}
  26. }else{write-host ('"'+$txtfile+'" 未找到');}
  27. $parentfolder=(get-item -literal ".").Name;
  28. $starttime=(get-date).ToString('yyyy-MM-dd HH:mm:ss');
  29. $arr=@(
  30.     $($env:USERNAME);
  31.     $ip,
  32.     $parentfolder,
  33.     $filename,
  34.     $author,
  35.     $version,
  36.     $starttime,
  37.     "",
  38.     "制作中",
  39.     "0"
  40. );
  41. $enc=[Text.Encoding]::GetEncoding('UTF-8');
  42. $title='"本机当前用户名","本机IP地址","编号","名称","版本","作者","开始时间","结束时间","当前状态","制作次数"';
  43. if(-not (test-path -literal $csvfile)){
  44.     $line='"'+($arr -join '","')+'"';
  45.     $newtext=$title+"`r`n"+$line;
  46.     [IO.File]::WriteAllText($csvfile, $newtext, $enc);
  47. }else{
  48.     $oldtext=[IO.File]::ReadAllLines($csvfile, $enc);
  49.     $isexist=$false;
  50.     for($i=0;$i -lt $oldtext.count;$i++){
  51.         $brr=$oldtext[$i].trim('"') -split '","';
  52.         if($brr[2] -eq $parentfolder){
  53.             $isexist=$true;
  54.             $arr[9]=([int]$brr[9]+1).ToString();
  55.             $oldtext[$i]='"'+($arr -join '","')+'"';
  56.         }
  57.     }
  58.     if($isexist){
  59.         [IO.File]::WriteAllLines($csvfile, $oldtext, $enc);
  60.     }else{
  61.         $line='"'+($arr -join '","')+'"';
  62.         $newtext=($oldtext -join "`r`n")+"`r`n"+$line;
  63.         [IO.File]::WriteAllText($csvfile, $newtext, $enc);
  64.     }
  65. }
复制代码

作者: zaqmlp    时间: 2022-3-16 19:51

结束
  1. <# :
  2. cls&echo off&cd /d "%~dp0"&rem 编码ANSI
  3. powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText(\"%~f0\",[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
  4. pause
  5. exit
  6. #>
  7. $csvfile=".\..\记录.csv";
  8. $txtfile=".\文档\文件.txt";
  9. $ip='null';
  10. $wmi=Get-WmiObject -Class Win32_NetworkAdapterConfiguration|?{($_.IPEnabled -eq $true) -and ($_.Description -notmatch 'Virtual')};
  11. if($wmi.IPAddress -ne $null){
  12.     $ip=$wmi.IPAddress[0];
  13. }
  14. $filename='null';
  15. $author='null';
  16. $version='null';
  17. $enc=[Text.Encoding]::GetEncoding('GB2312');
  18. if(test-path -literal $txtfile){
  19.     $text=[IO.File]::ReadAllText($txtfile, $enc);
  20.     $m=[regex]::match($text, '@名称@=([^\r\n]+)');
  21.     if($m.Success){$filename=$m.groups[1].value;}
  22.     $m=[regex]::match($text, '@作者@=([^\r\n]+)');
  23.     if($m.Success){$author=$m.groups[1].value;}
  24.     $m=[regex]::match($text, '@版本@=([^\r\n]+)');
  25.     if($m.Success){$version=$m.groups[1].value;}
  26. }else{write-host ('"'+$txtfile+'" 未找到');}
  27. $parentfolder=(get-item -literal ".").Name;
  28. $endtime=(get-date).ToString('yyyy-MM-dd HH:mm:ss');
  29. $enc=[Text.Encoding]::GetEncoding('UTF-8');
  30. if(-not (test-path -literal $csvfile)){
  31.     write-host ('"'+$txtfile+'" 未找到');
  32.     exit;
  33. }else{
  34.     $oldtext=[IO.File]::ReadAllLines($csvfile, $enc);
  35.     $isexist=$false;
  36.     for($i=0;$i -lt $oldtext.count;$i++){
  37.         $brr=$oldtext[$i].trim('"') -split '","';
  38.         if($brr[2] -eq $parentfolder){
  39.             $isexist=$true;
  40.             $brr[0]=$env:USERNAME;
  41.             $brr[1]=$ip;
  42.             $brr[3]=$filename;
  43.             $brr[4]=$author;
  44.             $brr[5]=$version;
  45.             $brr[7]=$endtime;
  46.             $brr[8]="已完成";
  47.             $brr[9]=([int]$brr[9]+1).ToString();
  48.             $oldtext[$i]='"'+($brr -join '","')+'"';
  49.             break;
  50.         }
  51.     }
  52.     if($isexist){
  53.         [IO.File]::WriteAllLines($csvfile, $oldtext, $enc);
  54.     }else{
  55.         write-host '未开始';
  56.     }
  57. }
复制代码

作者: linfeng_321    时间: 2022-3-16 20:53

支付宝,已支付,谢谢!
作者: 5i365    时间: 2022-3-17 08:03

回复 2# zaqmlp


    大侠好, 想请教一下, 您的脚本前面的如下代码和【#@&cls&powershell "gc '%~0'|out-string|iex"&pause&exit】相比可以规避哪些陷阱呢?
<# :
cls&echo off&cd /d "%~dp0"&rem 编码ANSI
powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText(\"%~f0\",[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
pause
exit
#>
作者: linfeng_321    时间: 2022-3-17 14:25

回复 3# zaqmlp

加20元红包
新增和修改数据,插入第二行显示;

"本机当前用户名","本机IP地址","编号","名称","版本","作者","开始时间","结束时间","当前状态","制作次数"
----新增或修改后这条数据,插入第二行显示。以此类推往下排序。
"username","192.168.1.22","1222211223","一个小蝌蚪","二麻子","3","2022/03/16 16:48:05","","已完成","2"
作者: zaqmlp    时间: 2022-3-17 14:31

回复 6# linfeng_321

报酬少了,50元帮改
作者: linfeng_321    时间: 2022-3-17 14:38

回复 7# zaqmlp

就50
作者: zaqmlp    时间: 2022-3-17 14:54

本帖最后由 zaqmlp 于 2022-3-17 16:07 编辑

开始
作者: linfeng_321    时间: 2022-3-17 15:12

回复 9# zaqmlp


倒序排列

"本机当前用户名","本机IP地址","编号","名称","版本","作者","开始时间","结束时间","当前状态","制作次数"
----新增或修改后数据时,插入第二行显示。以此类推往下排序。
"username","192.168.1.21","1222211244","小小蜜蜂","大麻子","2","2022/03/16 16:48:06","2022/03/16 16:48:17","已完成","2"
"username","192.168.1.22","1222211223","一个小蝌蚪","二麻子","3","2022/03/16 16:48:05","2022/03/16 16:48:15","已完成","2"
没有修改的数据...
作者: linfeng_321    时间: 2022-3-17 15:13

新增或修改这条数据时,倒序排列。
作者: zaqmlp    时间: 2022-3-17 15:16

回复 10# linfeng_321
为什么不早说倒序排,100元
作者: linfeng_321    时间: 2022-3-17 15:17

开始.bat
目前永远只显示一条数据:不对

结束.bat
是不是也要写一下,数据也修改了,那么排列顺序就变了

我大概的意思
作者: zaqmlp    时间: 2022-3-17 15:33

回复 13# linfeng_321


    结束还没改完
不知道你说什么意思,算了,放弃
作者: linfeng_321    时间: 2022-3-17 15:34

回复 6# linfeng_321


    ----新增或修改后这条数据,插入第二行显示。以此类推往下排序。
这结果不就是倒序排吗?什么乱七八糟的不懂
作者: zaqmlp    时间: 2022-3-17 16:07

开始
  1. <# :
  2. cls&echo off&cd /d "%~dp0"&rem 编码ANSI
  3. powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText(\"%~f0\",[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
  4. pause
  5. exit
  6. #>
  7. $csvfile=".\..\记录.csv";
  8. $txtfile=".\文档\文件.txt";
  9. $ip='null';
  10. $wmi=Get-WmiObject -Class Win32_NetworkAdapterConfiguration|?{($_.IPEnabled -eq $true) -and ($_.Description -notmatch 'Virtual')};
  11. if($wmi.IPAddress -ne $null){
  12.     $ip=$wmi.IPAddress[0];
  13. }
  14. $filename='null';
  15. $author='null';
  16. $version='null';
  17. $enc=[Text.Encoding]::GetEncoding('GB2312');
  18. if(test-path -literal $txtfile){
  19.     $text=[IO.File]::ReadAllText($txtfile, $enc);
  20.     $m=[regex]::match($text, '@名称@=([^\r\n]+)');
  21.     if($m.Success){$filename=$m.groups[1].value;}
  22.     $m=[regex]::match($text, '@作者@=([^\r\n]+)');
  23.     if($m.Success){$author=$m.groups[1].value;}
  24.     $m=[regex]::match($text, '@版本@=([^\r\n]+)');
  25.     if($m.Success){$version=$m.groups[1].value;}
  26. }else{write-host ('"'+$txtfile+'" 未找到');}
  27. $parentfolder=(get-item -literal ".").Name;
  28. $starttime=(get-date).ToString('yyyy-MM-dd HH:mm:ss');
  29. $arr=@(
  30.     $($env:USERNAME);
  31.     $ip,
  32.     $parentfolder,
  33.     $filename,
  34.     $author,
  35.     $version,
  36.     $starttime,
  37.     "",
  38.     "制作中",
  39.     "0"
  40. );
  41. $enc=[Text.Encoding]::GetEncoding('UTF-8');
  42. $title='"本机当前用户名","本机IP地址","编号","名称","版本","作者","开始时间","结束时间","当前状态","制作次数"';
  43. if(-not (test-path -literal $csvfile)){
  44.     $line='"'+($arr -join '","')+'"';
  45.     $newtext=$title+"`r`n"+$line;
  46.     [IO.File]::WriteAllText($csvfile, $newtext, $enc);
  47. }else{
  48.     $oldtext=[IO.File]::ReadAllLines($csvfile, $enc);
  49.     $isexist=$false;
  50.     for($i=0;$i -lt $oldtext.count;$i++){
  51.         $brr=$oldtext[$i].trim('"') -split '","';
  52.         if($brr[2] -eq $parentfolder){
  53.             $isexist=$true;
  54.             $arr[9]=([int]$brr[9]+1).ToString();
  55.             $oldtext[$i]='"'+($arr -join '","')+'"';
  56.         }
  57.     }
  58.     if($isexist){
  59.         [IO.File]::WriteAllLines($csvfile, $oldtext, $enc);
  60.     }else{
  61.         $line='"'+($arr -join '","')+'"';
  62.         $newtext=$oldtext[0]+"`r`n"+$line;
  63.         if($oldtext.count -ge 2){
  64.             $newtext=$oldtext[0]+"`r`n"+$line+"`r`n"+($oldtext[1..($oldtext.count-1)] -join "`r`n");
  65.         }
  66.         [IO.File]::WriteAllText($csvfile, $newtext, $enc);
  67.     }
  68. }
复制代码

作者: zaqmlp    时间: 2022-3-17 16:10

回复 15# linfeng_321


    如果这样,那么只要修改开始不就行了
作者: linfeng_321    时间: 2022-3-17 16:37

回复 17# zaqmlp


    这样也行,费用过去了




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