Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在批处理脚本中重命名文件_Windows_Batch File_Cmd - Fatal编程技术网

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"