标题: [文本处理] 删除行中的重命名的BAT批处理为何出错? [打印本页]
作者: lzyecho 时间: 2014-1-13 19:09 标题: 删除行中的重命名的BAT批处理为何出错?
下面代码是关于对本目录及下级子目录中“批量删除含有指定字符串的行”的批处理代码,但是执行到最后重命名没在成功!即 代码 ren "%%ix" "%%i" 没起作用。请帮忙查找原因?(我手动改名后对比了文件里的内容都能达到目的。)
另外我将for语句换成 for /f "tokens=1 delims=" %%i in ('dir /s/a/b *.txt') do,也是出现同样问题!
但是若换成('dir /a/b *.txt'),即去掉dir的参数/s则能正确执行,但是却不能对下级子目录中的文件操作。 各位老大,谢谢帮忙。- @echo off
- rem 批量删除含有指定字符串的行
- set /p "str=请输入要删除行包含的字符串并回车:"
- echo.
- echo 开始操作,请稍后...
- for /r %%i in (*.txt) do (
- (findstr /v/r "%str%" "%%i">"%%ix") & (del /a /f /q "%%i") &( ren "%%ix" "%%i")
- )2>nul
- echo.
- echo 操作完成,按任意键结。。。。。。
- pause>nul
复制代码
作者: apang 时间: 2014-1-13 20:12
本帖最后由 apang 于 2014-1-13 20:25 编辑
ren 的格式是: ren "路径+文件(夹)名" "新文件(夹)名"
"新文件(夹)名" 不能包含路径。如果包含路径,就有可能重命名到其它地方,相当于移动,这是不允许的。
作者: DAIC 时间: 2014-1-13 21:10
- @echo off
- rem 批量删除含有指定字符串的行
- set /p "str=请输入要删除行包含的字符串并回车:"
- echo.
- echo 开始操作,请稍后...
- for /r %%i in (*.txt) do (
- findstr /v /r "%str%" "%%i" >"%%ix" && move /y "%%ix" "%%i"
- )
- echo.
- echo 操作完成,按任意键结。。。。。。
- pause>nul
复制代码
作者: lzyecho 时间: 2014-1-13 23:04
本帖最后由 lzyecho 于 2014-1-13 23:43 编辑
回复 3# DAIC
感谢二位的热心解答!!感谢apang的对ren命令的详细说明;特别是DAIC,你给出的move命令很好的解决了同时处理子目录的问题!
但有一个余留问题就是(我做了多次测试):当少数文件中只有一行时,最后一步的move命令失效!! , 能否解决?
作者: lzyecho 时间: 2014-1-13 23:41
回复 4# lzyecho
借用DAIC提示的思路,我做了多次互换测试,发现将for语句做如下更改则可以达到目的,原因不知,请懂的朋友给解释一下,先谢了!- @echo off
- rem 批量删除含有指定字符串的行
- set /p "str=请输入要删除行包含的字符串并回车:"
- echo.
- echo 开始操作,请稍后...
- for /f "tokens=1 delims=" %%i in ('dir /s/a/b *.txt') do (
- (findstr /v/r "%str%" "%%i">"%%ix") & (move /y "%%ix" "%%i"
- )
- )1>nul 2>nul
- echo.
- echo 操作完成,按任意键结。。。。。。
- pause>nul
复制代码
作者: lzyecho 时间: 2014-1-14 00:16
回复 3# DAIC
再次测试发现,将DAIC 的do 语句中连接两个命令的&&换成一个&却能顺利执行,达到目的!!也不知原因??
呵呵,太晚了,睡啦。。。
作者: DAIC 时间: 2014-1-14 08:17
回复 6# lzyecho
&&是findstr执行成功的情况下才执行move
&是不管findstr执行是否成功都要执行move
作者: lzyecho 时间: 2014-1-14 09:29
回复 7# DAIC
这两个符号的意思我知道的,(从重命名后没有删除的文件改成txt文件格式后能看出来,确实达到了目的),但是却执行不了我上面说的问题,请求解释。
作者: DAIC 时间: 2014-1-14 14:40
回复 8# lzyecho
达到了什么目的?
执行不了你说的什么问题?
作者: lzyecho 时间: 2014-1-14 16:31
本帖最后由 lzyecho 于 2014-1-14 16:36 编辑
回复 9# DAIC
感谢DAIC的热心解答!!!
第一个,解决了删除了指定的行!第二,但是没有将文件名改回来!也就我在4楼提出的问题:若多个文件中只有一行时,move命令失效!而其它多行则不存在这个问题。
作者: DAIC 时间: 2014-1-14 16:49
回复 10# lzyecho
你不是说把 && 改成 & 之后就成功了吗?
对于只有一行内容的文件,你在文件末尾加个空行试试。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |