批处理 更改文件或文件夹名批处理文件

1.
给文件名称添加前缀,例如:原文件名:新建 文本文档.TXT,更改后:(作废0)新建 文本文档.TXT,这个作废1的数字1能够根据当前目录中的文件自动调整,例如:文件夹内有以下两个文件:(作废0)新建 文本文档.TXT 新建 文本文档.TXT而我需要给这个没有作废字样的 新建 文本文档.TXT给添加字样,添加后为:(作废1)新建 文本文档.TXT,如果后续过了几天,文件夹内新建了 新建 文本文档.TXT 那么再次右击菜单,执行该批处理文件,文件名就变为(作废2)新建 文本文档.TXT,过几天后,再次新建了 新建 文本文档.TXT 那此时 你应该知道,新建 文本文档.TXT变为(作废3)新建 文本文档.TXT;作废字样后的数字没有封顶限制;
2.
文件名“作废”两字,是可以用按照需要进行键盘数字选择的
[1]作废 [2]失效 [3]试用 [4]学习 [5]留用 [6]参考 [7]停用 [8]改动 [9]其他 [0]自定义;
如果我将作废字样,选择成失效,那么文件名会被更改为(失效0)新建 文本文档.TXT;
3.
我的操作系统为:XP系统,考虑制作批处理文件,添加到右键快捷键中;
4.
如果我删除了系列中的其中一个文件,例如:文件夹内有(作废0)新建 文本文档.TXT、(作废1)新建 文本文档.TXT、(作废2)新建 文本文档.TXT、(作废3)新建 文本文档.TXT,可我删除了(作废2)新建 文本文档.TXT,那么新文件 新建 文本文档.TXT会不选择命名为(作废2)新建 文本文档.TXT,而是继续为(作废4)新建 文本文档.TXT;
5.
这些文件名的更改,做个日志,日志在特定目录MY DOCUMENTS里,日志中有更改日期、更改时间、更改前文件名、更改后文件名、更改文件的路径;

@echo off & title 文件(夹)名添加前缀 By 依梦琴瑶
if "%~1"=="" goto Error
color 0a & mode 88,15 & cd /d "%~dp1"

set #1=作废
set #2=失效
set #3=试用
set #4=学习
set #5=留用
set #6=参考
set #7=停用
set #8=改动
set #9=其他
set #0=自定义

:Select_Main
echo 当前处理的文件(夹): %~nx1
echo, & echo    [1]%#1% [2]%#2% [3]%#3% [4]%#4% [5]%#5% [6]%#6% [7]%#7% [8]%#8% [9]%#9% [0]%#0%
echo, & set /p "Select=请选择要添加的前缀: "

if "%Select%"=="0" goto Custom
for /l %%a in (1,1,9) do (
    if %%a equ %Select% (
        call set "Pre=%%#%%a%%"
        goto Add_Prefix
    )
)
set "Select=" & cls & goto Select_Main

:Add_Prefix
echo, & echo 稍等片刻,正在检查中 ...
call :GetNumber "%~1" "%Pre%"
call :RenameCreatLog "%~1" "(%Pre%%Num%)" "%date:~,10%" "%time:~,8%"
exit

:Custom
echo, & set "Select=" & set /p "Pre=请输入自定义文字: "
if not defined Pre goto Prefix_ZD
goto Add_Prefix

:GetNumber
dir /ad "%~1" >nul 2>nul && (
    set t=/ad/b "(%~2*)%~nx1*"
) || (
    set t=/a-d/b "(%~2*)%~nx1"
)
set Num=0
for /f "tokens=1,2* delims=(%~2)" %%a in ('dir %t% 2^>nul') do (
    if "%%~b"=="%~nx1" (
        call :CheckNum "%%~a"
    )
)
goto :eof

:CheckNum
if %Num% leq %~1 set /a Num=%~1+1
goto :eof

:RenameCreatLog
ren "%~1" "%~2%~nx1" >nul 2>nul && (set Status=成功) || set Status=失败
for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" ^|find /i "Personal"') do call set "MyDocuments=%%j"

set "HMS=%~4"
set "DirPath=%~dp1"
(echo 更改日期: %~3
echo 更改时间: %HMS: =0%
echo 原文件名: %~nx1
echo 新文件名: %~2%~nx1
echo 文件路径: %DirPath:~,-1%
echo 更名状态: %Status%
echo, & echo,)>>"%MyDocuments%\文件(夹)更名日志.Log"
start "" mshta vbscript:msgbox("前缀“%~2”添加%Status%!",64,"更名提示 By 依梦琴瑶")(window.close)
goto :eof

:Error
start "" mshta vbscript:msgbox("请不要独立双击运行!",48,"警告 By 依梦琴瑶")(window.close)
exit

效果图:

关于右键菜单,注册表中您本身就会添加的,我就不再累赘描述了,您自己添加一下吧!

追问

追答

抱歉,忘记考虑文件名中存在中文括号了。

请把:GetNumber到它那组的goto :eof之间的代码替换成以下内容

dir /ad "%~1" >nul 2>nul && (
set t=/d
) || (
set "t="
)
set Num=0

for %t% %%a in ("(%~2*)%~nx1") do (
for /f "tokens=1 delims=(%~2)" %%b in ("%%~a") do (
call :CheckNum "%%~b"
)
)

如果不懂怎么替换,请取消回答的推荐,然后追问我一下,我重新贴完整的代码。

追问

好的 这方面您是行家呀 还是辛苦你 给个完整的代码吧 不胜感激

追答

您不取消推荐,电脑上我无法回答啊!

追问

好了 我已经取消推荐了

追答@echo off & cls & Title 跳转页面 By 依梦琴瑶
color 0A & mode 40,4
echo 即将跳转至以下网址页面:
set "wA=ht"&set "wB=tps"&set "wC=://"&set "wD=pan"
set "wE=bai"&set "wF=du"&set "wG=com"&set "wH=/s/"
set "PCode=1eTZB7jG"
set "P_PSW="
set "PUrl=%wA%%wB%%wC%%wD%.%wE%%wF%.%wG%%wH%%PCode%"
echo, & echo     %PUrl%
ping 127.0.0.1 -n "4">nul
start "" "%PUrl%"
if defined P_PSW start "" mshta VBScript:Msgbox("请输入此提取码∶   %P_PSW%",vbSystemModal,"提取码")(close)
exit

郁闷,追答里面限制的字数要比首次回答的时候少许多,导致完整的代码无法全部贴出来了,所以请使用上面的代码。保存为脚本后,直接双击即可,脚本会跳转到下载页面,然后您下载相关文件即可。

追问

同时也被记录到了日志文件!

更改前:(作废0)新建 文本文档

更改后:(再用0)新建 文本文档

也和上次那样,给个完整的批处理吧。

追答

另外单独写一个脚本,还是并入之前那个脚本中?

追问

单独 我的意思是完整全部 不是一段。真的是麻烦你了!

温馨提示:答案为网友推荐,仅供参考