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

[文本处理] [已解决]字符提取 && 文本比较 && 参数引用

本帖最后由 kingboli 于 2012-9-2 16:19 编辑

请教两个程序需同时实现1、2;  或同时实现1、3
1. 提取文本A中每行最后一个“/”后面的字符,并将提取的内容保存到B文本。
2. 比较B文本和C文本的内容,看B中是否含有C文本中某行的内容,如果含有某行内容,则输出D文本中相应行的内容(D和C文本有相同的行数)。

3. 为了向牛牛们学习更多的知识,增加点难度,把“2” 中的内容改为“比较B文本和C文本的内容,看B中是否含有C文本中某行的内容,如果含有某行内容,则将C和D中该行的内容作为参数传给E程序”


如:
A的内容有如下格式(/的个数不确定):

u   Dir1/dir2/dir3../a.txt
4849  Dir4/dir5/dir6../b(1.2.3).txt
ddd9  D ir4/dir6/d ir7../c d(1.2.3)fe(234).txt
fe  Dir4/dir6/dir3../f f(1 2 3)e(2-3-4).txt
fe  Dir4/di r4/dir2../dir..8/你好(中文括号)(英文括号).txt

C的内容为:

c d(1.2.3)fe(234).txt
(1.2.3).txt
a.txt


D的内容:

ddfejbln1
ffex2
ddfefrf3

按照1的要求:

B的内容应为:
a.txt
b(1.2.3).txt
c d(1.2.3)fe(234).txt
f f(1 2 3)e(2-3-4).txt
你好(中文括号)(英文括号).txt


按照2的要求,B和C比较,含有C中第1行的内容,则输出D中第1行的内容,然后发现同时含有C中第3行的内容,则继续输出D中第3行的内容.

最终的输出结果为:
ddfejbln1
ddfefrf3


按照3的要求,B和C比较,含有C中第1行的内容,则传递C和D中第1行的内容给程序E, 并执行E. 然后发现同时含有C中第3行的内容,则传递C和D中第3行的内容给程序E, 并继续执行E.

最终的输出结果为:
E  "c d(1.2.3)fe(234).txt"  "ddfejbln1"
E  "a.txt"  "ddfefrf3"


注:参照网友的程序,用如下程序实现第一步,但是遇到含有英文括号和空格的情况就会报错,求解释

for /f "delims=" %%j in (A.txt) do (
  for /f "delims=" %%i in ("%%j") do (
    set directory=%%i
    set fname=
    call :separate
)
)

exit 0

:separate
if not "%directory:~-1%"=="/" (
set fname=%directory:~-1%%fname%
set directory=%directory:~0,-1%
goto :separate
) else (
echo %fname% >>B.txt
)

本帖最后由 apang 于 2012-8-31 23:56 编辑
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do set "%%~nxa=1"
  3. ((for /f "delims=" %%a in (c.txt) do (
  4.   set/p N=
  5.   if defined %%a (
  6.     setlocal enabledelayedexpansion
  7.     echo,!N!&endlocal
  8.   )
  9. ))<d.txt)>Result.txt
复制代码
1

评分人数

TOP

这个好像不能实现啊。。麻烦您在帮忙看看吧。非常感谢~~

TOP

没有生成B.TXT,过渡的

TOP

回复 4# apang
初学批处理,希望知道为什么我问题里提到的程序,遇到空格和英文括号就不能生成B。 还请牛牛再给一个可以生成B的方法。呵呵。。非常感谢~~

TOP

  1. @echo off
  2. for  /f  "tokens=4 delims=/" %%a  in (a.txt) do echo %%a>>B.txt
  3. pause
  4. 
复制代码
解决第一个问题的办法

TOP

回复 6# 无知小菜鸟
/ 有多少个是不确定的。。用这个好像不行吧~~

TOP

回复 7# kingboli
呵呵,确实只能解决确定的/ , 是我死板了,不过题目说明白点,那我再想象,我也是新手

TOP

回复 5# kingboli

顶楼的例子,貌似要将set等号两边用引号包围,如:set "directory=%%j"
  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.   echo,%%~nxa
  4.   set "%%~nxa=1"
  5. ))>b.txt
  6. ((for /f "delims=" %%a in (c.txt) do (
  7.   set "C=%%a"&set/p D=
  8.   if defined %%a (
  9.     setlocal enabledelayedexpansion
  10.     echo,E "!C!" "!D!"&endlocal
  11.   )
  12. ))<d.txt)>Result.txt
复制代码
1

评分人数

TOP

返回列表