Windows 在批处理脚本中重命名文件
我有一个文件夹,其中的文件名为:Windows 在批处理脚本中重命名文件,windows,batch-file,cmd,Windows,Batch File,Cmd,我有一个文件夹,其中的文件名为: -backup- powerpoint1.ppt -backup- powerpoint2.ppt -backup- powerpoint3.ppt 我需要将同一文件夹中的文件重命名为: powerpoint1.ppt powerpoint2.ppt powerpoint3.ppt 我需要一个批处理脚本来完成 到目前为止,我已经在网上搜索并得出了这个结论,但这些值正在正确解析: @echo off setlocal EnableDelayedExpansio
-backup- powerpoint1.ppt
-backup- powerpoint2.ppt
-backup- powerpoint3.ppt
我需要将同一文件夹中的文件重命名为:
powerpoint1.ppt
powerpoint2.ppt
powerpoint3.ppt
我需要一个批处理脚本来完成
到目前为止,我已经在网上搜索并得出了这个结论,但这些值正在正确解析:
@echo off
setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /b *.pptx') do (
set "dt=%%i"
echo.!dt!
set sh=!dt!
echo.!sh!
set "str=%sh:~12,4%"
echo "%%i" "%str%"
set /a a+=1
)
您的代码没有按预期工作,因为您错过了申请临时变量
sh
和str
。还有提取的字符串部分!嘘:~12,4代码>不正确,应为!什:~9
以删除-backup-
前缀。这是正确的代码:
@echo关闭
setlocal EnableDelayedExpansion
设置a=1
对于/f“delims=“%%i in('dir/b*.pptx')do(
设置“dt=%%i”
回声/!dt!
设置sh=!dt!
回声/!嘘!
设置“str=!sh:~9!”
ECHO ren“%%i”“!str!”
设置/a a+=1
)
实际上,我不会提取某些字符位置,但我会通过删除常量前缀-backup-
。您不需要中间变量sh
和str
,也不需要计数器a
。所以我会这样做:
@echo关闭
setlocal EnableDelayedExpansion
对于/f“delims=“%%i in('dir/b*.pptx')do(
设置“dt=%%i”
设置“dt=!dt:*-备份-=!”
ECHO ren“%%i”“!dt!”
)
端部
验证正确的输出后,从代码中删除大写的ECHO
命令以实际重命名文件。如果文件名中不需要的部分以空格分隔,请执行以下简单操作:
@Echo off
For /F "delims=" %%A in ('Dir /B/A-D "-backup- powerpoint*"'
) Do For /f "tokens=2" %%B in ("%%A") Do Echo Ren "%%A" "%%B"
应该这样做(独立于扩展)
我不会提取一定数量的字符,我会删除常量前缀-backup-
,如下:设置“dt=!dt:*-backup-=!”
(这被称为)为什么不对str
变量使用延迟扩展?…以及sh
?并且不需要所有这些中间变量(sh
,str
)和计数器a
。当您有*.ppt
文件(根据您的描述)时,为什么要使用filter*.pptx
?@aschipl…谢谢你的提示…它工作得很好…我上面的示例代码应该有.pptx而不是.ppt…我很抱歉…你是对的,我不需要那些额外的变量sh str等…我试图一次调试一个语句…这是对我有效的最终代码……@echo off setlocal EnableDelayedExpansion为/f“delims=”('dir/b*.pptx')do设置a=1(设置“dt=%%i”设置“dt=!dt:*-backup-=!”重命名“%%i”“!dt!”设置/a+=1)
Ren "-backup- powerpoint1.ppt" "powerpoint1.ppt"
Ren "-backup- powerpoint2.ppt" "powerpoint2.ppt"
Ren "-backup- powerpoint3.ppt" "powerpoint3.ppt"