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

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

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

回复 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

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

TOP

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

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

本帖最后由 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

本帖最后由 newswan 于 2021-10-4 16:08 编辑

回复 15# qixiaobin0715


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

谢谢!!!

TOP

探讨关于在for循环中使用set name几个问题。
我也在关注如何解决此帖中问题,基本想法和你类似。其中有几个问题未考虑成熟:
1.当没有变量引导符时,比如set __,可以显示所有以__开头的变量,并以通常顺序显示;
2.当循环设置变量,并使用这些变量处理完成后,再次循环设置变量时,前面设置的变量并不会自动消失,还会存在,直到将它们设置为空值或是退出cmd后。
所以,使用set name来处理帖子中的问题时,如果没有顺序要求应当可行。并且要考虑在下次循环前清空前面的变量值。
我自己未想到解决的办法。

TOP

本帖最后由 newswan 于 2021-10-4 15:37 编辑

目录是这样的
  1. ├───aaa
  2. │   ├───01
  3. │   └───02
  4. └───bbb
复制代码
刚才 网站 拒绝登陆

TOP

本帖最后由 newswan 于 2021-10-4 15:32 编辑

powershell 好一些
  1. $sour = "aaa"
  2. $dest = "bbb"
  3. $exclude = "20210227"
  4. Remove-Item $dest\*.txt
  5. Get-ChildItem -path $sour *.txt -Recurse | foreach-object {
  6.     ( get-content $_.fullname ) -match "\w+\s+\w+\s+[-]?\w+" -notmatch $exclude | out-file -append $dest\$_
  7. }
  8. Get-ChildItem -path $dest *.txt | foreach-object {
  9.     $a = get-content $_.fullname | sort-object -unique
  10.     $a | out-file $dest\$_
  11.     notepad.exe $dest\$_
  12. }
复制代码
1

评分人数

    • PCL0769: 高技术 高人品技术 + 1

TOP

本帖最后由 newswan 于 2021-10-4 15:34 编辑
  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=* delims=" %%a in ("%%~fa") do (
  12.         set __%%a=%%a
  13.     )
  14.    
  15.     (
  16.         for /f "usebackq tokens=2 delims==" %%a in (`set __`) do (
  17.             echo %%a
  18.         )
  19.     ) > "%%~fa"
  20.     notepad.exe "%%~fa"
  21. )
复制代码
1

评分人数

    • PCL0769: 高技术 高人品技术 + 1

TOP

回复 11# newswan
找不到 C:\*.txt
文件名、目录名或卷标语法不正确。

@echo off
setlocal ENABLEDELAYEDEXPANSION

set sour=C:\Users\Administrator\Desktop\15单\新建文件夹
set dest=C:\Users\Administrator\Desktop\15单\新建文件夹2

del %dest%\*.txt

for /f "usebackq tokens=* delims=" %%a in (`dir /s /b "%sour%\*.txt"`) do (
    sed -r -n -e "/\w+\s+\w+\s+\w+/p" -e "/%exclude%/d" "%%~fa">> "%dest%\%%~na.txt"
)

for /f "usebackq tokens=* delims=" %%a in (`dir /s /b "%dest%\*.txt"`) do (
    set _file_=%%~fa
    for /f "usebackq tokens=* delims=" %%a in ("%_file_%") do (
        set __%%a=%%a
    )
   
    (
        for /f "usebackq tokens=2 delims==" %%a in (`set __`) do (
            echo %%a
        )
    ) > "%_file_%"
    notepad "%_file_%"
)

TOP

我测试正确的,你自己调试一下

set sour=aaa    源路径
set dest=bbb    目的路径

set exclude=20210226   排除列表

TOP

返回列表