Windows: 批量重命名
1.批量重命名扩展名
CMD提供一个简单有效的命令:
rename *.tm3 *.mp3
但是该命令只能批量修改本层目录下的文件名,如果希望递归修改那么Powershell就是最佳选择:
get-childitem *.tm3 -recurse| rename-item -newname { $_.name -replace “.tm3″,”.mp3″ }
如果省略命令选项-recurse,那么也是作用于本层目录。
2.删除扩展名
CMD命令:
rename *.tm3 *.
Powershell命令:
get-childitem * | rename-item -newname { $_.name -replace “.tm3″,”” }
3.追加扩展名
CMD需要先删除扩展名后再添加:
rename * *.mp3
Powershell是更好的选择:
get-childitem | rename-item -newname { $_.Name + “.jpg” }
4.按数字增量批量重命名{递归处理子目录,而且是先从子目录开始计算}
get-childitem *.mp3 -recurse | ForEach-Object -begin { $count=1 } -process { rename-item $_ -NewName “QQMusic_$count.mp3”; $count++ }
Reference:
[1] Batch File Rename with Windows PowerShell [ http://tweaks.com/windows/49459/batch-file-rename-with-windows-powershell/ ]
[2] Windows: 批量重命名 | Lesca技术宅 http://lesca.me/archives/batch-file-rename-with-cmd-or-powershell.html
———————–
::遍历目录,去掉 tmp 扩展名
for /R . %%f in (*.tmp) do ren %%f %%~nf
上面的命令是为了去掉“.tmp”这个扩展名,所以用 for 命令来遍历。但如果仅仅是修改扩展名则更简单,只要运行 ren *.bat *.txt 即可。另附一段好玩的批处理:将下面的代码保存成 bat 文件,双击运行就能将当前目录下的 jpg 图片文件按 1-N 的顺序重新命名(用来批量处理从网上下载下来的图片非常有效)。大家可以自行修改扩展名。
::b.bat
@echo off
::开启延迟的变量扩充
setlocal enabledelayedexpansion
::计数器
set /a i=1
for /R . %%f in (*.jpg) do (
ren %%f !i!.jpg
set /a i=!i!+1
)
批量重命名汇总
只要大家悉心观察,还有很多好玩的问题可以去解决。现将各种批量重命名的批处理代码汇总如下:
按顺序重命名文件
将当前目录下不规则命名的 jpg 文件依次重命名成 1.jpg、2.jpg 等:
@echo off
::开启延迟的变量扩充
setlocal enabledelayedexpansion
::计数器
set /a i=1
for %%f in (*.jpg) do (
ren %%f !i!.jpg
set /a i=!i!+1
)
递归地处理子目录文件
其他代码都是处理当前目录下的文件,这个程序给出递归处理子目录的模板(for /R . %f in (*) do @echo %f):
for /R . %f in (*) do echo %f
去掉文件名日期前缀
需求出处:http://www.oschina.net/code/snippet_125800_4330
for %f in (*.sc2replay) do for /F “delims=- tokens=4*” %t in (“%f”) do move %f %t
替换文件名中的字串
需求出处:http://www.oschina.net/code/snippet_143158_4337
@echo off
setlocal enabledelayedexpansion
for %%f in (*) do (
set name=%%f
move !name! !name:%1=%2!
)
这个批处理接收两个命令行参数。比如你将上述代码保存成 rn.bat,执行 rn a b,程序就会把当前目录下所有文件名中的字母 a 替换成 字母 b。
在 for 语句中使用 /R 选项的话就可以递归到子目录去。Linux 下或 Cygwin 里用 shell 也能做到类似的功能,比如下面的代码是把当前目录文件中的 abc 替换成 def:
for f in *; do mv $f ${f/abc/def}; done
@echo off
setlocal enabledelayedexpansion
for %%f in (*) do (
set name=%%~nf
set ext=%%~xf
move !name!.!ext! !name:%1=%2!.!ext!
)
将文件名变成大写
需求出处:http://www.oschina.net/code/snippet_99867_4340
:: convert file name to upper case
@echo off
setlocal enabledelayedexpansion
set LowerCase=abcdefghijklmnopqrstuvwxyz
set UpperCase=ABCDEFGHIJKLMNOPQRSTUVWXYZ
for %%f in (*.txt) do (
set string=%%f
for /L %%d in (0,1,25) do (
set from=!LowerCase:~%%d,1!
set to=!UpperCase:~%%d,1!
call :convert !from! !to!
)
move %%f !string!
)
goto end
:convert
set string=!string:%1=%2!
goto :eof
:end
Shell版批量重命名
功能和上述批处理一致,但使用bash来完成
按顺序重命名文件
将当前目录下不规则命名的 jpg 文件依次重命名成 1.jpg、2.jpg 等
i=1
for f in *.jpg; do
mv $f ${i}.jpg
((i++))
done
递归地处理子目录文件
其他代码都是处理当前目录下的文件,这个程序给出递归处理子目录的模板
# 处理子目录文件
find . -name ‘*.log’ -type f | while read p; do
fname=$(basename $p)
# do some thing for fname
mv $p $(dirname $p)/$fname
done
去掉文件名日期前缀
需求出处:http://www.oschina.net/code/snippet_125800_4330
for f in *.sc2replay; do mv $f ${f##*-}; done
替换文件名中的字串
需求出处:http://www.oschina.net/code/snippet_143158_4337
for f in *; do
name=${f%.*}
ext=${f##*.}
mv $f `sed ‘s/e/x/g’ <<< $name`.$ext
done
将文件名变成大写
需求出处:http://www.oschina.net/code/snippet_99867_4340
for f in *; do
name=${f%.*}
ext=${f##*.}
mv $f `tr ‘a-z’ ‘A-Z’ <<< $name`.$ext
done
《 “Windows/Linux下的批量重命名” 》 有 7 条评论
常用的PowerShell函数和脚本
https://github.com/lazywinadmin/PowerShell
http://lazywinadmin.com
https://github.com/janikvonrotz/awesome-powershell
http://poshcode.org/
https://www.reddit.com/r/PowerShell/comments/49ahc1/what_are_your_cool_powershell_profile_scripts/
https://github.com/search?o=desc&q=powershell&s=stars&type=Repositories&utf8=%E2%9C%93
用PowerShell进行文本解析
`
PS C:> ipconfig | Select-String ‘IPv4’
IPv4 Address. . . . . . . . . . . : 192.168.2.112
PS C:> $data = ipconfig | select-string ‘IPv4’
PS C:> [regex]::Matches($data,”b(?:d{1,3}.){3}d{1,3}b”) | Select-Object -ExpandProperty Value
192.168.2.112
`
PowerShell 无文件持久化技术与常用的防御绕过技术介绍
http://www.binarydefense.com/powershell-injection-diskless-persistence-bypass-techniques/
绕过 PowerShell 运行可疑命令时记录 ScriptBlock 警告日志的方法
https://cobbr.io/ScriptBlock-Warning-Event-Logging-Bypass.html
Powershell 在红蓝两队中的应用
https://www.slideshare.net/nikhil_mittal/powershell-for-practical-purple-teaming
A tool with GUI used to create reports of access control lists (DACLs) and system access control lists (SACLs) in Active Directory.(用纯PowerShell写的AD域下的ACL扫描工具)
https://github.com/canix1/ADACLScanner
ACLight – 用于寻找域中高权限账户和隐藏管理员的 Powershell 脚本(A script for advanced discovery of Privileged Accounts – includes Shadow Admins)
https://github.com/CyberArkLabs/ACLight
Windows 环境下常用 PowerShell 脚本下载
https://sid-500.com/downloads/
Windows系统下如何用PowerShell计算文件的哈希值
How to get an MD5 checksum in PowerShell
https://stackoverflow.com/questions/10521061/how-to-get-an-md5-checksum-in-powershell
`
Get-FileHash $filepath -Algorithm MD5
Get-FileHash $filepath -Algorithm SHA1
`
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-filehash?view=powershell-7.1