无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4258|回复: 10
打印 上一主题 下一主题

[求助] 求助一个多变量的批处理

[复制链接]
跳转到指定楼层
1#
发表于 2017-5-16 14:49:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
需要一个批处理实现从指定文本文件读取第一行,并结合当前日期和时间,生成目录,并把指定文件拷入生成的文件,目录已经可以了,但不能拷文件。附上代码,请朋友们指点一下。



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了
2#
发表于 2017-5-16 21:08:05 | 只看该作者
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%
)
回复

使用道具 举报

3#
 楼主| 发表于 2017-5-18 10:35:33 | 只看该作者
谢谢nttwqz ,已经弄好了
回复

使用道具 举报

4#
 楼主| 发表于 2017-5-18 17:30:04 | 只看该作者
另外还想请教一个问题,就是a.txt里有类似  姓名=“张三”  的内容,想把张三提出来到b.txt中
但是 姓名=“张三” 并不是单独一行,还有其他内容,我用FINDSTR “姓名=”,只能提取这一行,不能精确提取 张三
谢谢

点评

用Excel导入文本,双引号做分隔符,然后整理一下  详情 回复 发表于 2017-5-18 18:28
回复

使用道具 举报

5#
发表于 2017-5-18 18:28:33 来自手机 | 只看该作者
54yinbin 发表于 2017-5-18 17:30
另外还想请教一个问题,就是a.txt里有类似  姓名=“张三”  的内容,想把张三提出来到b.txt中
但是 姓名 ...

用Excel导入文本,双引号做分隔符,然后整理一下
回复

使用道具 举报

6#
发表于 2017-5-18 20:47:31 | 只看该作者
  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个张三甚至特殊符号的情况,懒的研究了。。。
回复

使用道具 举报

7#
 楼主| 发表于 2017-5-19 14:11:55 | 只看该作者
谢谢,但是我的TXT文件是随机生成的,所以不能用EXCEL随时去处……
我测试你的代码,感觉用"tokens=2 delims=“”" 返回的值为空,也就是用“” 只会返回一个空值。
而我用"tokens=2 delims= ”,也就是用空格,可以返回相应的值。如果只有姓名=“张三”,得到的结果是对的,但是这个TXT包含姓名=“张三”这一列有很多内容组成,例如 ID="123456" 性别=“男” 姓名=“张三”,这样的一列,只会返回 123456,如果把姓名=“张三”放在列最前面,也可以得到正确的值,那么也就是说代码会返回这一列第一个空格之前的内容。

点评

rem 适用于每行使用了多个中文双引号的情况 这个也不行??  详情 回复 发表于 2017-5-19 17:06
回复

使用道具 举报

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


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

这个也不行??

楼上说的是,分析处理文本,最好把文件传上来,敏感的内容可以修改成类似内容,要不然只能猜了……
回复

使用道具 举报

9#
 楼主| 发表于 2017-5-20 11:10:27 | 只看该作者
谢谢两位,昨天结合nttwqz 的代码,认真学习了FOR 的参数,最终搞清楚了相关参数的含义,也就顺利完成了这个代码
for /f "tokens=2 delims==" %%a in ('type aaaa.txt ^| findstr /c:"姓名=“"') do echo %%a
但我发现,不能用"做分隔符,我用= 做分隔符,然后用tokens=X来确定要取的文本。
顺道请教一下,如何清除字符串里的空格,空格的位置不固定如可能是 ”  apple apple ",也可能是“appl eapple"

点评

看来你还是没有弄明白上面这段代码 你需要学习下set命令,set除了设置错了,输入选择,计算用的较多只要,还有一个重要的功能:文本处理,常见的有文本(变量)截取,替换,删除。set "var=!var:*姓名=“=!"  详情 回复 发表于 2017-5-20 13:03
回复

使用道具 举报

10#
发表于 2017-5-20 13:03:57 来自手机 | 只看该作者
本帖最后由 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内使用需要开启变量延迟
回复

使用道具 举报

11#
 楼主| 发表于 2017-5-21 13:27:19 | 只看该作者
nttwqz 发表于 2017-5-20 13:03
看来你还是没有弄明白上面这段代码

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-30 17:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表