标题: [问题求助] PowerShell怎样重命名前先备份所有文件的原始文件名? [打印本页]
作者: 5i365 时间: 2023-2-2 08:39 标题: PowerShell怎样重命名前先备份所有文件的原始文件名?
大家好!
我想给当前文件夹下的所有文件重命名, 但重命名软件一旦执行,即使改错了也改不回来了, 不知道哪个是哪个了
所以我想在重命名前, 先执行一下PS脚本A.bat, 它能生成一个当前所有文件原始文件名的PS脚本B.bat,执行该脚本可以还原所有原始的文件名,
难点在于:得想办法找到文件名和文件某个属性的对应关系
这个很有趣, 用ps脚本生成另一个ps脚本
请求路过高手支招, 多谢
作者: terse 时间: 2023-2-2 13:45
可以根据文件 "Md5" "SHA1" “CRC32” “base64” 对应备份一个列表
因为这些是唯一的 剩下的就比效率了
作者: 5i365 时间: 2023-2-2 15:37
回复 2# terse
多谢大侠支招, 这些md5什么的, 得要借助第三方工具吧, 自带属性什么的无解吗/
作者: terse 时间: 2023-2-2 16:46
回复 3# 5i365
PowerShell 可以
作者: idwma 时间: 2023-2-6 14:36
是要这样的吗- fsutil file queryfileid a.txt
复制代码
作者: 5i365 时间: 2023-2-6 18:02
本帖最后由 5i365 于 2023-2-6 18:06 编辑
回复 5# idwma
多谢大侠, 不懂这个命令怎么用
假设咱们要写的脚本是A.bat, 执行此脚本后, 会生成另一个脚本B.bat, 然后我随便改脚本文件目录下的文件的名字(包含子目录), 我想全部反悔时, 就执行B.bat 然后我所有的更改的名字全还原了
今天在坛里看到一个命名软件叫拖把命名器, 它能预览改名后的效果, 挺不错, 但上面的功能, 感觉也很有趣
作者: idwma 时间: 2023-2-7 12:41
回复 6# 5i365
文件id改名不会变呀,和md5的用法一样
作者: pd1 时间: 2023-2-7 17:46
本帖最后由 pd1 于 2023-2-7 18:15 编辑
保存为A.bat后运行,会生成一个B.bat和hash.bat(这个就是保存的一个hash表),然后你运行你的改名,最后运行B.bat恢复试试。- <# :
- @echo off
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
- pause
- #>
- $bat=@'
- <# :
- @echo off
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
- pause
- #>
- $ss=ConvertFrom-Json -InputObject (Get-Content .\hash.bat)
- dir -s|Where-Object{$_.Extension -ne ".bat" -and $_ -is [System.IO.FileInfo]}|ForEach-Object{$h=(Get-FileHash -Path $_.FullName -Algorithm MD5).hash;ren $_.FullName $ss.$h.Replace((Split-Path $ss.$h).ToString()+"\","")}
- '@
- $bat|Out-File -Append -Encoding default -FilePath B.bat
- $s="{"
- dir -s|Where-Object{$_.Extension -ne ".bat" -and $_ -is [System.IO.FileInfo]}|ForEach-Object{$s+='"'+(Get-FileHash -Path $_.FUllName -Algorithm MD5).hash+'":"'+$_.FullName.replace("\", "\\")+'",'}
- $s=$s.Substring(0,$s.Length-1)+"}"
- $s|Out-File -Append -FilePath hash.bat
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |