![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 07:06 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]如何将每个文本文件里的*号都换成文本文件名 |
| 可打印版本 941 / 6 |
| 第1楼 qazwsx99 | 发表于 2009-01-23 14:12 |
| 新手上路 发帖 9 积分 7 | |
|
[求助]如何将每个文本文件里的*号都换成文本文件名 我有一堆TXT文本文件
如 asdd.txt okghg.txt lili.txt 每个文本文件里都有*号 我想将每个文本文件里的*号都换成该文本文件的文件名 asdd.txt里的*号换成asdd.txt okghg.txt里的*号换成okghg.txt 兄弟帮忙写个批处理。谢谢。 ![]() |
|
| 第2楼 qazwsx99 | 发表于 2009-01-23 23:52 |
| 新手上路 发帖 9 积分 7 | |
|
这个用批处理是不是要求太高了。:)
哪位仁兄帮帮忙。 |
|
| 第3楼 netbenton | 发表于 2009-01-24 04:49 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
@echo on&setlocal ENABLEDELAYEDEXPANSION
::字符串替换里,*是通配符 ::for /r 里用时也是通配符 ::确实难搞,这样试试看吧,如果文档不是很多特殊字符的话还是可以用的 set /p=正在处理: <nul for /r %%a in (*.txt) do ( set "filename=%%~nxa" set /p=%%~nxa<nul for /f "tokens=1,2* delims=:" %%i in ('findstr /o .* %%~fa^&cd.^>!filename!') do ( set "_cc=%%j"&call :sub echo.!_cc!>>!filename! set /a k=!k!+1 if !k!==10 (set k=0 &set /p=.<nul) ) echo. ) pause goto :eof :sub if not defined _cc goto :eof :next set "_bb=!_cc:**=!" call :get _len1 !_cc! call :get _len2 !_bb! if !_len1!==!_len2! goto :qu set /a _m=_len2+1 set "_cc=!_cc:~0,-%_m%!!filename!!_bb!" goto :next :qu goto :eof :get set "str=%2%3%4"&set n=0&set s=!str! if not defined str set %1=0&goto :eof :loop set /a n=!n!+16 set "m=!s!fedcba9876543210" set s=!str:~%n%! if not "!s!"=="" goto loop set /a %1=0x!m:~16,1!+!n!-15 goto :eof |
|
| 第4楼 yishanju | 发表于 2009-01-24 05:30 |
| 银牌会员 发帖 1,357 积分 1,488 | |
|
我疯了
设所有TXT文件放在E:盘TEST目录下, 用for 和dir 分析路径和文件名 用findstr /v 过滤不想修改的文件。 利用白杨 FR 替换文本中的*为文件名 FR 是一个非常强大字符串查找替换命令行工具,非常好用 可以在这里下载:http://baiy.cn/utils/fr/index.htm @echo off ::过滤掉的文件 set gl=/c:"readme.txt" /c:"1.txt" for /f "delims=" %%i in ('dir /s /b *.txt^|findstr /v %gl%') do ( fr "%%i" -f:"*" -t:"%%~nxi" ) pause |
|
| 第5楼 yishanju | 发表于 2009-01-24 05:33 |
| 银牌会员 发帖 1,357 积分 1,488 | |
|
for /f "delims=" %%i in ('dir /s /b *.txt') do (
fr "%%i" -f:"*" -t:"%%~nxi" ) 不带过滤的 |
|
| 第6楼 netbenton | 发表于 2009-01-24 23:21 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
特殊字符可以处理了 @echo off&setlocal ENABLEDELAYEDEXPANSION
::字符串替换里,*是通配符 ::for /r 里用时也是通配符 ::确实难搞,自己的最新发现:在开启变量扩展后不允许变量的内容里有!符号 ::以下可以处理特殊字符了,只是如果文本里有!字符的话将被丢弃。 echo 正在处理: for /r %%a in (*.txt) do ( set "fn=%%~nxa" set /p=%%~nxa <nul for /f "tokens=* delims=" %%i in ('findstr /o .* %%~fa^&cd.^>%%~fa') do ( set "_str=%%i"&set "_str=!_str:*:=!"&call :sub echo.!_str!>>%%~fa set /a k=!k!+1 if !k!==10 (set k=0 &set /p=.<nul) ) echo.完成 ) pause goto :eof :sub if not defined _str goto :eof set "_str=!_str:2=22!" set "_str=!_str:%%=323!" :next set "_str2=!_str:**=!" if !_str!==!_str2! goto :qu call :get _skip "!_str2!" set /a _skip+=1 set "_str=!_str:~0,-%_skip%!121!_str2!" goto :next :qu set "_str=!_str:121=%fn%!" set "_str=!_str:22=2!" set "_str=!_str:323=%%!" goto :eof :get set "str=%~2"&set n=0&set s=!str! if not defined str set %1=0&goto :eof :loop set /a n=!n!+16 set "m=!s!fedcba9876543210" set "s=!str:~%n%!" if not "!s!"=="" goto loop set /a %1=0x!m:~16,1!+!n!-15 goto :eof |
|
| 第7楼 netbenton | 发表于 2009-01-26 06:05 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
还要学习才行 @echo off
::因“自己的最新发现:在开启变量扩展后不允许变量的内容里有!符号”; ::此句若对谁产生了误导的,在这里表示道谦。 ::原因是set "_str=%%i"此句时进行变量展开,并非是变量内容里不允许有“!”。 ::现进行了改进,已经可以处理绝大多数字符了,除了汇编16进制小于2c的 ::部分控制字符以外。 ::对当前目录及以下的所有子录的TXT文件内含的“*”用该文件名代替; ::直接进行替换,不产生临时文件。 echo 正在处理(请稍候): for /r %%a in (*.txt) do ( set "fn=%%~nxa" set /p=%%~nxa <nul for /f "tokens=* delims=" %%i in ('"(type %%~fa^&cd.^>%%~fa)"^|findstr /o .*') do ( set "_str=%%i" setlocal ENABLEDELAYEDEXPANSION rem 为了读取空行进行的处理,丢弃:号前的偏移号 set "_str=!_str:*:=!" call :sub echo.!_str!>>%%~fa set /p=.<nul endlocal ) echo.完成 ) pause endlocal goto :eof :sub if not defined _str goto :eof rem 对特殊字符进行转换处理 set "_str=!_str:"=""!" set "_str=!_str:2=22!" set "_str=!_str:""=525!" set "_str=!_str:%%=323!" :next rem 因为*号的特殊,不能在变量内替换,只好在*号的处打断后换成代号121 rem 把*号前的去掉,取剩余字符串的长度,用来进行截串处理 set "_str2=!_str:**=!" if "!_str!"=="!_str2!" goto :qu set "str=!_str2!"&call :get _skip set /a _skip+=1 set "_str=!_str:~0,-%_skip%!121!_str2!" goto :next :qu rem 转换后的特殊字符恢复 set "_str=!_str:323=%%!" set "_str=!_str:121=%fn%!" set "_str=!_str:525="!" set "_str=!_str:22=2!" goto :eof :get rem 取字符的长度,返回值存在%1指定的变量 set n=0&set s=!str! if not defined str set %1=0&goto :eof :loop set /a n=!n!+16 set "m=!s!fedcba9876543210" set "s=!str:~%n%!" if not "!s!"=="" goto loop set /a %1=0x!m:~16,1!+!n!-15 goto :eof |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |