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

[文本处理] 批处理:if-变量值输出到文本的问题

请专家指引一下哦
①代码运行echo;"!tet:~0,2!"显示:“C:”,我该如何补全“ if "!tet!"=="!tet~0,2!" echo %%i ”,才能打印输出到txt文本呢?
②如果我要保留原文件的空行、格式不变,本代码又该怎么修改?
你的任何帮助对我都是有用的。谢谢!
代码如下:
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d /s *.txt') do (
set "tet=%%i"
if "!tet!"=="!tet:~0,2!" echo %%i >> 3.txt
echo;"!tet:~0,2!"
)
pause
批处理我不会多嘛!

俺好像没看明白楼主的真实需要

TOP

回复 2# hfxiang

确实感觉挺怪的,我也没看懂,还有些疑惑.

楼主开头说的:
代码运行echo;"!tet:~0,2!"显示:“C:”,那如下代码怎么会相等?
另外就算不看这句话,单看代码 !tet!获取到的是批处理所在目录 所有.txt文档的全路径,如下代码【 "!tet!"=="!tet:~0,2!"】也不可能相等吧!
  1. if "!tet!"=="!tet:~0,2!"
复制代码

TOP

回复 3# fzp070

@WBATW
楼主得好好说说自己的需求,你目前的代码批处理即使在C盘运行,结果也是不可能相等。
目前代码中获取到的  "!tet!" 举例是 "C:\1.txt" ,而"!tet:~0,2!"就是 "C:" ,这两者就不可能相等啊!

TOP

估计是提取文件名前两个字符相同的文本的内容,输出到文本3?回复 3# fzp070

TOP

回复 5# 77七

应该不是,这个批处理获取到的文本文件都是同一个盘符的,即 提取文件名前两个字符 都是一样的。如果是这个想法,没必要这样判断啊。

TOP

回复 6# fzp070

TOP

回复 2# hfxiang

非常感谢各位专家!
我重新描述一下:
   本批处理代码要解决的问题是:提取目录子目录下(文件夹)所有txt文本文件内容中少于3个字符的行输出到3.txt。
   我把('dir /b /a-d /s *.txt')它改为1.txt单个文件,运行代码可以获取小于3字符的所有行到3.txt。但是批量处理就不行了,我用添加 echo;"!tet:~0,2!" 调试查看在cmd窗口显示:“C:”,有几个文件就显示几个/每行一个“C:”,我想问题应该出在 if....句,但是我不会处理了,特向批处理专家请教,分享大家的好办法。
   第②个问题我想是这样的:如果不是提取而直接批量删除小于3个字符的行,那么如何保留各个文本原格式不变,比如原来的空行、空格等保留不变

TOP

本帖最后由 WBATW 于 2022-10-22 21:23 编辑

回复 4# fzp070

我的重新描述放在 8楼(回复 2# hfxiang)烦请专家看看哦

TOP

回复 3# fzp070

我的重新描述放在 8楼(回复 2# hfxiang)烦请专家看看哦

TOP

回复 10# WBATW

呃,我只是个初学者,你的问题我还没太搞懂。帮你呼高手@WHY

TOP

本帖最后由 fzp070 于 2022-10-22 22:59 编辑

回复 8# WBATW


    如下代码是提取a.txt文本文件内容中少于3个字符的行内容 输出到3.txt,保存ANSI格式,确保文本也是ANSI格式。
没有试所有目录子目录下(文件夹)所有文档,所有文档感觉挺复杂的,待高人。
  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "tokens=1 delims=" %%a in (a.txt) do (
  3.     set tempa=%%a
  4.         if "!tempa:~3,1!"=="" echo %%a>>3.txt
  5. )
  6. exit
复制代码
第②个问题我想是这样的:如果不是提取而直接批量删除小于3个字符的行,那么如何保留各个文本原格式不变,比如原来的空行、空格等保留不变。==删除小于3个字符的行,仅针对a.txt一个文本
  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "tokens=1 delims=" %%a in (a.txt) do (
  3.     set tempa=%%a
  4.         if not "!tempa:~2,1!"=="" echo %%a>>3.txt
  5. )
  6. exit
复制代码

TOP

回复 10# WBATW

提取批处理所在目录的多个文本,少于3位的行内容,保存在文本所在目录,和文本同名-1.txt的文档内(也可以保存在同一个文档内,自己改下)。
  1. @echo off&setlocal EnableDelayedExpansion
  2. set j=1
  3. for /f "delims=" %%i in ('dir /b /a-d /s *.txt') do (
  4. set "tet=%%i"
  5. echo 正在处理文本!j!
  6. for /f "tokens=1 delims=" %%a in ('findstr .* "!tet!"') do (
  7.     set tempa=%%a
  8.         if "!tempa:~2,1!"=="" echo %%a>>!tet!-1.txt
  9. )
  10. set /a j+=1
  11. )
  12. exit
复制代码

TOP

本帖最后由 qixiaobin0715 于 2022-10-24 16:05 编辑

回复 8# WBATW
可以不用if而用findstr(感谢fzp070测试,补充说明:只能精确处理ASCII字符,如果存在中文等其它双字节字符,可能会有部分疏漏)
第一个问题:
  1. @echo off
  2. (for /f "tokens=1* delims=:" %%i in ('findstr /s /r /v "..." *.txt') do echo,%%j)>3.txt
复制代码
第二个问题:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /b /a-d *.txt') do (
  3. findstr /r /x /v ". .." "%%i">temp.log
  4. move "temp.log" "%%i"
  5. )
复制代码
以上代码保存为ANSI编码,bat文件放在主目录下。未经测试,请备份好源文件,以免出现问题。

TOP

回复 8# WBATW


建议你编辑顶楼的帖子内容描述具体需求。

如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-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

返回列表