[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
把文本拖到批处理上。文本要 ansi 编码。
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "tokens=1-2*" %%a in ('type %1') do echo %%a|findstr /b /i /c:"TPV_">nul 2>nul && set "名称=%%a    %%b" || echo %%a  %%b  %%c>>"!名称!.txt"
  3. pause & exit
复制代码
================================

TOP

用这个更简洁
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=" %%a in ('type %1') do echo %%a|findstr /b /i /c:"TPV">nul 2>nul && set "名称=%%a" || echo %%a>>"!名称!.txt"
  3. pause & exit
复制代码
==============================

TOP

本帖最后由 xczxczxcz 于 2018-8-12 10:34 编辑

回复 6# hlyahs

批处理 也要保存为 ansi 编码。 你的txt 也要保存 为 ansi 编码。

你如果 想要 对 utf 文本也能自动运行。可到本坛 下载 iconv.exe 放到系统目录下。或与 批处理放到一起。再在批处理中加一个判断。你的txt就可以是 utf8/ansi都可以。

http://batch-cn.qiniudn.com/tool/iconv.exe

TOP

本帖最后由 xczxczxcz 于 2018-8-12 11:58 编辑

回复 8# hlyahs

把你的 txt 发来看下,偶测试没问题的。或者你把批处理中的 乱码部分改成相同的英文字符.


把中文改英文,
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=" %%a in ('type %1') do echo %%a|findstr /i/c:"TPV">nul 2>&1 && set "str=%%a" || echo %%a>>"!str!.txt"
  3. pause & exit
复制代码
只要你的 txt 中没有中文字符.把 txt 拖到 批处理上。
那个 iconv.exe 没有毒。win10 defender 已查。偶是在官网下的 900多k的。

TOP

回复 8# hlyahs


    你是不是直接双击批处理的。要把 txt 拖到 批处理 上再松开 就可以了。

TOP

直接双击批处理
  1. @echo off & setlocal EnableDelayedExpansion
  2. del /q *.log>nul 2>nul
  3. for %%i in (*.txt) do for /f "delims=" %%a in ('type "%%i"') do echo %%a|findstr /i/c:"TPV">nul 2>&1 && set "str=%%a" || echo %%a>>"!str!.log"
  4. pause & exit
复制代码

TOP

回复 12# hlyahs

先把你已分离出来的文件 放到任意一个文件里,再把该文件夹拖到批处理上。
  1. @echo off & setlocal EnableDelayedExpansion
  2. md new>nul 2>nul
  3. for /f "delims=" %%a in ('dir/a-d/b "%~1\*.txt"') do (
  4.   set /a n=0
  5.   for /f "delims=" %%i in ('type "%~1\%%a"') do (
  6.      set /a n+=1
  7.      if !n! leq 1 (
  8.      set "str=%%i"
  9.      set "str=!str: =\!"
  10.      for /f "delims=" %%m in ("!str!\..") do if /i "%%~nxm" == "0" move /y "%~1\%%a" "new\"
  11.      )
  12.    )
  13. )
  14. pause & exit
复制代码

TOP

最后一列全为0才会复制,不要牙膏。双击按提示操作。
  1. @echo off & cd/d "%~dp0" & setlocal EnableDelayedExpansion
  2. echo 把【文件夹】拖到此窗口中,会处理子目录,非相关文件先移出再运行。
  3. echo;&set /p var=拖入文件夹,并回车:& CLS
  4. for /r "%var%" %%a in (*.txt) do ( for /f "delims=" %%a in ('type "%%a"') do (
  5. set "space=%%a" & set "space=!space: =/!"
  6. for /f "delims=" %%a in ("!space!") do if "%%~nxa" neq "0" set "#=#"
  7. )
  8. if not defined # ( xcopy /y "%%a" "0_Folder\">nul&&echo 复制 %%~nxa ) else set "#="
  9. )
  10. pause & exit
复制代码
1

评分人数

    • hlyahs: 今天和室友聊到用批处理处理数据,又想起大 ...技术 + 1

TOP

回复 19# hlyahs

没有错误,你的行尾有空格而已。这个比上个快些。话不要说模棱两可。
  1. @echo off & cd/d "%~dp0" & setlocal EnableDelayedExpansion
  2. echo 把【文件夹】拖到此窗口中,会处理子目录,非相关文件先移出再运行。
  3. echo;&set /p var=拖入文件夹,并回车:& CLS
  4. for /r "%var%" %%a in (*.txt) do ( for /f "delims=" %%a in ('type "%%a"') do (
  5. set "space=%%~nxa" & set "space=!space: =/!"
  6. call :AAA "!space!" )
  7. if defined # ( xcopy /y "%%a" "0_Folder\">nul&&echo 复制 %%~nxa )
  8. )
  9. pause & exit
  10. :AAA
  11. set "#="
  12. for /f "delims=" %%a in ("%1") do (if  "%%~nxa"=="0" set "#=#" &goto :eof )
复制代码
1

评分人数

TOP

你MM的能不能把所有一次提出。本来一个批就可以搞定的。硬要用好几个?是行尾全部为0 还是部分为0,第三列是任意一个大于100,还是全部大于100。尾部为0和列大于100,是并集还交集还是什么的。你奶奶的就不能一次讲清楚?本来很简单的问题,硬是这么搞来搞去的。偶一向性格好的都受不鸟了。

TOP

第三列任意一行有一个大于100时提取。不处理行尾的0/1。
  1. @echo off & cd/d "%~dp0" & setlocal EnableDelayedExpansion
  2. echo 把【文件夹】拖到此窗口中,会处理子目录,非相关文件先移出再运行。
  3. echo;&set /p var=拖入文件夹,并回车:& CLS
  4. for /f "delims=" %%a in ('dir/a-d/b/s "%var%\*.txt"') do (
  5. call :BBB "%%a"
  6. if defined # ( xcopy /y "%%a" "3_100_Folder\">nul&&echo 复制 %%~nxa )
  7. set "#="
  8. )
  9. pause & exit
  10. :BBB
  11. for /f "tokens=3" %%i in ('type %1') do (
  12. for /f "tokens=1* delims=." %%a in ("%%~nxi") do if "%%b"=="" (set /a n1=%%a,n2=0) else (echo %%b)|findstr "[1-9]">nul 2>&1 && (set/a n1=%%a,n2=1) || (set/a n1=%%a,n2=0)
  13. if !n2! equ 0 (if !n1! gtr 100 (set "#=#" &goto :eof)) else if !n1! geq 100 (set "#=#"&goto :eof )
  14. )
复制代码
只是针对该贴写的。勿套用到其它地方。批中只针对是否大于100而处理。能较快出结果,未优化。
1

评分人数

    • hlyahs: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

返回列表