Board logo

标题: [文件操作] 批处理命令findstr的正则表达式如何修改符合条件的文件名? [打印本页]

作者: mimixi666    时间: 2014-4-7 17:51     标题: 批处理命令findstr的正则表达式如何修改符合条件的文件名?

比如我目录下有,A B C D目录;
A B C D中都有子目录,它们的子目录里面都有
a你好.txt,b你好.txt,c你好.txt,d你好.txt,
你好a.txt,你好b.txt,你好c.txt,你好d.txt,
还有其它包含"你好"字符串的文件名,
我想把所有的文件名有"你好"的改成*"hello"*,这样的,该怎么实现??
比如,
a你好.txt,就用这条命令改成ahello.txt,
你好a.txt,就用这条命令改成helloa.txt,

可以实现吗??
作者: terse    时间: 2014-4-7 18:58

没测试
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /s /b /a-d * *你好*.*') do (
  3.     set str=%%~nxi
  4.     ren "%%i" "!str:你好=hello!"
  5. )
  6. pause
复制代码

作者: mimixi666    时间: 2014-4-8 17:25

没测试
terse 发表于 2014-4-7 18:58

能不能用一条命令来实现??
dos命令里面有正则表达式吗??
能不能用一条正则表达式来实现的??
作者: terse    时间: 2014-4-8 17:38

一条命令P估计难
作者: DAIC    时间: 2014-4-8 18:57

回复 3# mimixi666


不能

不能
作者: CrLf    时间: 2014-4-8 21:48

http://bbs.bathome.net/viewthread.php?tid=13231
http://bbs.bathome.net/viewthread.php?tid=13342
作者: terse    时间: 2014-4-8 23:42

win7 话 PS可试
  1. Function MoveTofile ($PH,$str1,$str2) {
  2.    Get-ChildItem  -Path "$PH" -Include *$str1*.txt -recurse |
  3.    Where-Object {!$_.PSIsContainer} |
  4.    % {
  5.        $_.MoveTo($_.DirectoryName + "\" + [RegEx]::Replace($_.name,"$str1", "$str2"))
  6.      }
  7. }
  8. MoveTofile "C:\Test" "你好" "hello"
复制代码

作者: CrLf    时间: 2014-4-9 00:29

回复 7# terse


    可以用 ren,不知下面两种是否等价:
  1. ls -recurse *.jpg | %{ren $_ { $_.name -replace "\.jpg",".txt"}
复制代码
  1. ls -recurse *.jpg | ren -newname { $_.name -replace "\.jpg",".txt"}
复制代码

作者: terse    时间: 2014-4-9 00:44

回复 8# CrLf
对POWERSHELL 的许多方法不是很熟 只是练手 见笑
另好像 REN 对特殊字符有感冒的
看了 REN 的说明
  1. -------------------------- 示例 4 --------------------------
  2. C:\PS>get-childItem *.txt | rename-item -newname { $_.name -replace '\.txt','.log' }
  3. 说明
  4. -----------
  5. 此示例说明如何使用替换运算符重命名多个文件,即使 NewName 参数不接受通配符也是如此。
  6. 此命令将当前目录中的所有 .txt 文件重命名为 .log。
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2