无忧启动论坛

标题: 求助一个多变量的批处理 [打印本页]

作者: 54yinbin    时间: 2017-5-16 14:49
标题: 求助一个多变量的批处理
需要一个批处理实现从指定文本文件读取第一行,并结合当前日期和时间,生成目录,并把指定文件拷入生成的文件,目录已经可以了,但不能拷文件。附上代码,请朋友们指点一下。



set str_time_first_bit="%time:~0,1%"
if %str_time_first_bit%==" " (
set str_date_time=%date:~0,4%%date:~5,2%%date:~8,2%_0%time:~1,1%%time:~3,2%%time:~6,2% ) else ( set str_date_time=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%)

for /f "delims=" %%i in (a.txt) do (md %%i@%str_date_time%)  新建目录成功

copy  指定文件 %%i@%str_date_time% 拷贝文件时目录变成%i@201705xx_xxxxxx了

作者: nttwqz    时间: 2017-5-16 21:08
set n=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
    set /a n+=1
    if !n!==1 md %%i@%str_date_time% && copy  指定文件 %%i@%str_date_time%
)
作者: 54yinbin    时间: 2017-5-18 10:35
谢谢nttwqz ,已经弄好了
作者: 54yinbin    时间: 2017-5-18 17:30
另外还想请教一个问题,就是a.txt里有类似  姓名=“张三”  的内容,想把张三提出来到b.txt中
但是 姓名=“张三” 并不是单独一行,还有其他内容,我用FINDSTR “姓名=”,只能提取这一行,不能精确提取 张三
谢谢
作者: nttwqz    时间: 2017-5-18 18:28
54yinbin 发表于 2017-5-18 17:30
另外还想请教一个问题,就是a.txt里有类似  姓名=“张三”  的内容,想把张三提出来到b.txt中
但是 姓名 ...

用Excel导入文本,双引号做分隔符,然后整理一下
作者: nttwqz    时间: 2017-5-18 20:47
  1. @echo off
  2. rem 假设每行只有姓名,比如“张三”使用了中文双引号,其它地方未使用
  3. pushd %~dp0
  4. for /f "tokens=2 delims=“”" %%a in ('type aaaa.txt ^| findstr /c:"姓名=“"') do echo %%a
  5. pause


  6. rem 适用于每行使用了多个中文双引号的情况
  7. for /f "delims=" %%b in ('type aaaa.txt ^| findstr /c:"姓名=“"') do (
  8.         setlocal enabledelayedexpansion
  9.         set "var=%%b"
  10.         set "var=!var:*姓名=“=!"
  11.         for /f "delims=”" %%c in ("!var!") do echo %%c
  12.         endlocal
  13. )
  14. pause
复制代码



至于有N行每行有N个张三甚至特殊符号的情况,懒的研究了。。。
作者: 54yinbin    时间: 2017-5-19 14:11
谢谢,但是我的TXT文件是随机生成的,所以不能用EXCEL随时去处……
我测试你的代码,感觉用"tokens=2 delims=“”" 返回的值为空,也就是用“” 只会返回一个空值。
而我用"tokens=2 delims= ”,也就是用空格,可以返回相应的值。如果只有姓名=“张三”,得到的结果是对的,但是这个TXT包含姓名=“张三”这一列有很多内容组成,例如 ID="123456" 性别=“男” 姓名=“张三”,这样的一列,只会返回 123456,如果把姓名=“张三”放在列最前面,也可以得到正确的值,那么也就是说代码会返回这一列第一个空格之前的内容。

作者: nttwqz    时间: 2017-5-19 17:06
本帖最后由 nttwqz 于 2017-5-19 17:09 编辑
54yinbin 发表于 2017-5-19 14:11
谢谢,但是我的TXT文件是随机生成的,所以不能用EXCEL随时去处……
我测试你的代码,感觉用"tokens=2 deli ...


rem 适用于每行使用了多个中文双引号的情况

这个也不行??

楼上说的是,分析处理文本,最好把文件传上来,敏感的内容可以修改成类似内容,要不然只能猜了……
作者: 54yinbin    时间: 2017-5-20 11:10
谢谢两位,昨天结合nttwqz 的代码,认真学习了FOR 的参数,最终搞清楚了相关参数的含义,也就顺利完成了这个代码
for /f "tokens=2 delims==" %%a in ('type aaaa.txt ^| findstr /c:"姓名=“"') do echo %%a
但我发现,不能用"做分隔符,我用= 做分隔符,然后用tokens=X来确定要取的文本。
顺道请教一下,如何清除字符串里的空格,空格的位置不固定如可能是 ”  apple apple ",也可能是“appl eapple"

作者: nttwqz    时间: 2017-5-20 13:03
本帖最后由 nttwqz 于 2017-5-20 13:06 编辑
54yinbin 发表于 2017-5-20 11:10
谢谢两位,昨天结合nttwqz 的代码,认真学习了FOR 的参数,最终搞清楚了相关参数的含义,也就顺利完成了这 ...

  1. rem 适用于每行使用了多个中文双引号的情况
  2. for /f "delims=" %%b in ('type aaaa.txt ^| findstr /c:"姓名=“"') do (
  3.         setlocal enabledelayedexpansion
  4.         set "var=%%b"
  5.         set "var=!var:*姓名=“=!"
  6.         for /f "delims=”" %%c in ("!var!") do echo %%c
  7.         endlocal
  8. )
复制代码


看来你还是没有弄明白上面这段代码

你需要学习下set命令,set除了设置变量,输入选择,计算用的较多之外,还有一个重要的功能:文本处理,常见的有文本(变量)截取(提取指定部分),替换,删除。set "var=!var:*姓名=“=!"的意思就是删除变量var中第一个姓名=“之前的内容,删除变量var(值是一行内容)中的所有空格就是set "var=!var: =!"

注意,在for内使用需要开启变量延迟
作者: 54yinbin    时间: 2017-5-21 13:27
nttwqz 发表于 2017-5-20 13:03
看来你还是没有弄明白上面这段代码

你需要学习下set命令,set除了设置变量,输入选择,计算用的 ...

受教了,的确,遇到问题的时候,只想解决当前问题,没有认真系统的去学习,而成了个可耻的伸手党




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3