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

[文本处理] 【已解决】批处理命令set与find组合赋值的问题,本题的有点儿变态,要用到find命令

本帖最后由 jian123ch 于 2014-10-12 19:22 编辑

有一名为test2.txt的文本,内容如下:
37        赵大        男        18        14.5        34        24        90.5        1
13        钱二二        男        18        15        34.5        22        89.5        2
11        孙小小        女        16        15.5        30.5        27        89        3
14        李四四        女        18        15        30.5        23        86.5        4
15        张三三        男        16        16        31        23        86        5
9        李四七        女        18        12        32        23        85        6
35        王二小        男        18        15        28.5        23        84.5        7
要将文中性别全部更换,如果是“男”,就换成“女”;如果是“女”则更换成“男”,然后生成新的文件test3.txt,我写的代码如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if exist test3.txt del test3.txt
  4. for /f "delims=" %%i in (test2.txt) do (
  5. set strtmp=%%i
  6. set flagstr=@echo !strtmp!^|find /c "男"
  7. if !flagstr!==1 set strtmp=!strtmp:男=女! else set strtmp=!strtmp:女=男!
  8. @echo !strtmp!>>test3.txt
  9. )
  10. type test3.txt
复制代码
可是一直没有生成理想中的文件。经过逐名排查,发现在批处里文件中运行set flagstr=@echo !strtmp!^|find /c "男"这句好象有问题。但是问题在呢一直不明白,还请各位大虾帮分析指正。

Batcher 发表于 2014-10-12 14:56


您好!请问"&","&&"与"||"这些组合命令在代码中使用时的优先级顺序是怎样的?

TOP

看起来好猥琐:
apang 发表于 2014-10-12 16:13

纯粹的代码练习呀!您多想了哈。。。

TOP

回复 5# Batcher

实验了几个不同的组合,貌似“&”,“&&”与“||”这间的优先级是相同的。

TOP

Batcher 发表于 2014-10-12 14:56


好象你的代码执行结果与原题也有一些偏差,原来为“男”,则可以正常替换为“女”,可是原来为“女”则不能替换为“男”

TOP

本帖最后由 jian123ch 于 2014-10-12 18:20 编辑

回复 8# terse
您好,如果将if "!strtmp: 男 = 女 !" == "!strtmp!" (set strtmp=!strtmp: 女 = 男 !) else set strtmp=!strtmp: 男 = 女 !这句代码修改成if "!strtmp:男=女!"=="!strtmp!" (set strtmp=!strtmp:女=男!) else set strtmp=!strtmp:男=女!
这样运行的结果才对。可是您的解题思想的确很巧,但是与原题的要求还是有点儿偏差,您这里没有用到“find”命令;哦。呵。。呵。。这道的是有点儿变态的哦。

TOP

回复 3# apang
这题是有点儿变态,呵。。呵。。题目的本意是要用到find命令,您的解法是调用了“WScript”对象,这是一个比较高端应用的解法。呵。。呵。。本人还没有学习到呀!

TOP

回复 12# bailong360
没错!的确如此,但是我一直找不到更好的方法来解决他。难道只能绕过find命令吗?

TOP

回复 14# terse

不知道怎么回事,我的代码中必须这样写
  1. echo !strtmp!| find /c "男" >nul&& set strtmp=!strtmp:男=女!||set strtmp=!strtmp:女=男!
复制代码
即必须是"!strtmp:男=女!",而不能是"!strtmp: 男 = 女 !",否则执行的结果就不能。一旦加了空格就不对了!是不是我的系统是Win7的系统呀!

TOP

回复 8# terse
你好,你的代码中下面这名
  1. if "!strtmp: 男 = 女 !" == "!strtmp!" (set strtmp=!strtmp: 女 = 男 !) else set strtmp=!strtmp: 男 = 女 !
复制代码
我有点不清楚,if "!strtmp: 男 = 女 !" == "!strtmp!" 当中的“”为什么这样用?能说明一下码?我想很多菜鸟不是很清楚。

TOP

返回列表