|
qazwsx99
新手上路
积分 7
发帖 9
注册 2009-1-21
状态 离线
|
『楼 主』:
[求助]如何将每个文本文件里的*号都换成文本文件名
我有一堆TXT文本文件
如
asdd.txt
okghg.txt
lili.txt
每个文本文件里都有*号
我想将每个文本文件里的*号都换成该文本文件的文件名
asdd.txt里的*号换成asdd.txt
okghg.txt里的*号换成okghg.txt
兄弟帮忙写个批处理。谢谢。
|
|
2009-1-23 14:12 |
|
|
qazwsx99
新手上路
积分 7
发帖 9
注册 2009-1-21
状态 离线
|
『第
2 楼』:
这个用批处理是不是要求太高了。:)
哪位仁兄帮帮忙。
|
|
2009-1-23 23:52 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
3 楼』:
@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
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-24 04:49 |
|
|
yishanju
银牌会员
[b]看你妹啊[/b]
积分 1488
发帖 1357
注册 2006-5-20
状态 离线
|
『第
4 楼』:
我疯了
设所有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
|
有问题请发论坛或者自行搜索,再短消息问我的统统是SB |
|
2009-1-24 05:30 |
|
|
yishanju
银牌会员
[b]看你妹啊[/b]
积分 1488
发帖 1357
注册 2006-5-20
状态 离线
|
『第
5 楼』:
for /f "delims=" %%i in ('dir /s /b *.txt') do (
fr "%%i" -f:"*" -t:"%%~nxi"
)
不带过滤的
|
有问题请发论坛或者自行搜索,再短消息问我的统统是SB |
|
2009-1-24 05:33 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
6 楼』:
特殊字符可以处理了
@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
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-24 23:21 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
7 楼』:
还要学习才行
@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
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-26 06:05 |
|