[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 newswan 于 2021-10-4 16:08 编辑

回复 15# qixiaobin0715


欠考虑,如果是单文件去重,需要清除变量

谢谢!!!

TOP

本帖最后由 newswan 于 2021-10-4 18:52 编辑
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set sour=C:\Users\admin\Desktop\New folder (2)\aaa
  4. set dest=C:\Users\admin\Desktop\New folder (2)\bbb
  5. set exclude=20210226
  6. del "%dest%\*.txt"
  7. for /f "usebackq tokens=* delims=" %%a in (`dir /s /b "%sour%\*.txt"`) do (
  8.     sed -r -n -e "/\w+\s+\w+\s+\w+/p" -e "/%exclude%/d" "%%~fa">> "%dest%\%%~na.txt"
  9. )
  10. for /f "usebackq tokens=* delims=" %%a in (`dir /s /b "%dest%\*.txt"`) do (
  11.     for /f "usebackq tokens=2 delims==" %%a in (`set __ 2^>nul`) do (
  12.         set %%a=
  13.     )
  14.     for /f "usebackq tokens=* delims=" %%a in ("%%~fa") do (
  15.         set __%%a=1
  16.     )
  17.    
  18.     (
  19.         for /f "usebackq tokens=2 delims==" %%a in (`set __`) do (
  20.             echo %%a
  21.         )
  22.     ) > "%%~fa"
  23.     notepad.exe "%%~fa"
  24. )
复制代码
1

评分人数

    • PCL0769: 谢谢老师出手帮助!高技术!高人品!技术 + 1

TOP

本帖最后由 PCL0769 于 2021-10-4 18:12 编辑

回复 15# qixiaobin0715
老师好!
现在用老师你上次帮写的D:/ABC合并,然后用vbs  SZ替换为0|   SH 替换为1|  空格替换成| SZ138...-QQ...替换成空格(此处还是留有不全的一行数据)。
分两步完成,首先用bat合并 ,然后vbs替换,这么做的结果是会留有不完整的行数据

0|301075|20210930|44406634
1|601077|20210930|-67302759
0||20210930|0 (0|后面的空格就是SZ139...-QQ...替换后的空数值)

newswan老师好!
楼上的代码还是闪退。
谢谢!

TOP

我这里运行是正确的,你自己调试吧

TOP

回复 19# newswan
老师好!刚刚传了部分文本到云盘。
链接:
https://pan.baidu.com/s/1hqJLvFBn6n1Y-g9518TVyw
提取码:
9ewg

TOP

回复 20# PCL0769


数据量很大,powershell 效率高些
  1. $sour = "D:\share\tech\New folder (2)\aaa"
  2. $dest = "D:\share\tech\New folder (2)\ccc"
  3. $exclude = "20210227"
  4. Remove-Item $dest\*.txt
  5. get-date
  6. Get-ChildItem -path $sour *.txt -Recurse | foreach-object {
  7.     $_.fullname
  8.     ( get-content $_.fullname ) -match "\w+\s+\w+\s+[-]?\w+" -notmatch $exclude -replace "SZ","1" -replace "SH","0" -replace "\s+","|" | out-file -append $dest\$_
  9. }
  10. get-date
  11. Get-ChildItem -path $dest *.txt | foreach-object {
  12.     $_.fullname
  13.     $a = get-content $_.fullname | sort-object -unique
  14.     $a | out-file $dest\$_
  15. }
  16. get-date
复制代码
1

评分人数

    • PCL0769: 谢谢老师出手帮助!高技术!高人品!技术 + 1

TOP

回复 18# PCL0769


建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。

如果你在执行.bat脚本,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ

如果你在执行.ps1脚本,请参考:
http://bbs.bathome.net/thread-31071-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 22# Batcher
好的谢谢老师提醒,以后注意。
双击运行时,只见到闪了一下,来不及看批处理出现什么问题就退出界面,小白一枚,还请老师见谅!

TOP

本帖最后由 PCL0769 于 2021-10-4 23:08 编辑

回复 21# newswan
老师好!谢谢!
请教老师,后缀是用bat吗?
源数据放在桌面C:\Users\Administrator\Desktop\15单\金额16\补数据文件夹下
这里是不是要这么修改:
$sour = "C:\Users\Administrator\Desktop\15单\金额16\补数据\aaa"
$dest = "C:\Users\Administrator\Desktop\15单\金额16\补数据\ccc"
按这修改后还是闪退,是不是在最后加上PUSH就不会出现闪退,实在太快退出界面不知道没运行起来是什么原因。

TOP

本帖最后由 newswan 于 2021-10-5 00:56 编辑

回复 24# PCL0769

使用 powershell 看这里
http://www.bathome.net/thread-59270-1-1.html

如果批处理,用第三方命令 sort 排序去重,效率高。
  1. ├───aaa    <--- 数据源
  2.      ├───01
  3.      └───02
复制代码

TOP

回复 21# newswan
确实是这样。批处理代码倒是写出来了,真是慢的让人忍受不了。

TOP

本帖最后由 newswan 于 2021-10-5 12:23 编辑

回复 26# qixiaobin0715

去重 效率比较
gnu:sort = vbs > powershell > 批处理

第三方命令,有的和  windows 自带命令重名
第三方命令保存到单独目录,然后把这个路径添加到 %path% 的前面部分
比如
  1. set Path=C:\msys64\usr\bin;%Path%
复制代码

TOP

回复 27# newswan
批处理处理大文本文件速度确实慢,就楼主提供的文件测试,for /f 变量替换速度也不行。

TOP

本帖最后由 newswan 于 2021-10-5 13:15 编辑

回复 28# qixiaobin0715


vbs 不会,但是 powershell 效率低,是很无语的。ms 一向是这样
批处理+第三方 有时候也麻烦。

TOP

本帖最后由 PCL0769 于 2021-10-5 13:40 编辑

回复 29# newswan
老师好!
下面是从论坛组装的VBS替换
Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run "cmd /c dir /s/b *.txt > list.txt",vbHide
Wscript.Sleep 1000
sFile = "list.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = objFSO.OpenTextFile(sFile,1)
Do While Not oFile.AtEndOfStream
strLine = oFile.ReadLine
If Len(strLine) > 0 Then
Set File = objFSO.OpenTextFile(strLine, 1)
aryLines = File.ReadAll
File.Close
aryLines = Replace(aryLines, "SZ", "0|")
aryLines = Replace(aryLines, "SH", "1|")

Set File = objFSO.OpenTextFile(strLine, 2)
File.Write aryLines
File.Close
End If
Loop
oFile.Close
objFSO.DeleteFile sFile
Set objFSO = Nothing

这个替换效率还行,就是得分两步,一:bat合并  二:vbs替换
vbs将不完整的行和那个手机号QQ号的删除就搞不懂怎么组装

用这个VBS替换,目前一共有36个文件夹的内容,替换的话在10分钟内就完成了

只要转换的内容不出错,多花点时间没关系,最初的原始数据是个三列cvs,1月份到现在的数据拆分转换成现在的01-09文件夹,电脑不关机总运行了3天3夜。速度慢点没关系,只要数据转换不出错就行

TOP

返回列表