使用Windows批处理文件从文件扩展名中删除特定单词

时间:2014-01-21 02:10:38

标签: batch-file

我需要一些批处理脚本的帮助。我需要使用Windows批处理脚本从文件扩展名中删除特定单词。等

Error_test_qif,
Error_test2_qif,
Test3_error_qif,

我需要从文件名中删除“error”字符串,如下所示

Error_test_qif to test_qif,
Error_test2_qif to test2_qif,
Test3_error_qif to Test3_qif,

我尝试使用ren*命令但它只适用于从一个文件扩展名到另一个文件扩展名的批量重命名。帮助将不胜感激

2 个答案:

答案 0 :(得分:4)

这可能会简化,但你明白了:

@echo off
setlocal enableDelayedExpansion
for %%F in (*_error*) do (
  set "name=%%F"
  ren "!name!" "!name:_error=!"
)
for %%F in (*error_*) do (
  set "name=%%F"
  ren "!name!" "!name:error_=!"
)

另存为.bat或.cmd,并在与文件相同的目录中运行。


(原始发布的代码回滚 - 保留下面的附录)

尽管我不愿意编辑答案,遗憾的是现在编辑的答案是一个改编版本,并且会为名为“... error ...”的文件生成错误报告,而原始版本没有。

以下是对原始帖子的修改:(按历史记录响应文本下方的编辑日期时间链接)

@echo off
setlocal enableDelayedExpansion
for %%F in (*_error* *error_*) do (
  set "name=%%F"
  SET "name=!name:_error=!"
  ren "%%F" "!name:error_=!"
)

我相信这是代表回应的最佳编辑结果。

现在我们对规范进行了更改。发布的文件名不是假设的文件名,只是扩展名。这应该像这样修复:

@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%F in (*.*_error* *.*error_*) do (
  set "ext=%%~xF"
  SET "ext=!ext:_error=!"
  ren "%%F" "%%~nF!ext:error_=!"
)

答案 1 :(得分:0)

这对你有用......

@echo off 
SETLOCAL enabledelayedexpansion
SET "word=Error_"
IF "%word%"=="" GOTO :EOF
FOR /f "delims=" %%a IN ('dir /a-d /b "*%word%*.qif"') DO (
SET "fname=%%~na"
SET "fname=!fname:%word%=!"
IF NOT "!fname!"=="" REN "%%~a" "!fname!%%~xa"