批量重命名文件的最后几个字符

时间:2014-05-04 12:50:54

标签: batch-file

我正在尝试创建一个批处理文件,用于重命名文件夹中的一堆文件。这些文件的命名类似于:blah(lol).txt。总会有四个字母,后面是一个开括号,三个字母,最后是一个小括号。

我希望批处理文件删除文件名的括号部分,即。在没有括号部分的情况下重命名文件。

    for %%i IN (*.txt) DO (set name=%%~ni
    set name2=%name:~1,4%
    ren %%i %name2%)

为什么这不起作用?

4 个答案:

答案 0 :(得分:2)

Magoo提供了关于脚本失败的原因以及工作脚本的解释。

但在你的情况下,不需要脚本。只需一个简单的REN命令:

ren "????(???).txt" "????.*"

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "tokens=1,2,3delims=()" %%a IN (
  'dir /b /a-d "%sourcedir%\*(*).*" '
 ) DO ECHO REN "%sourcedir%\%%a(%%b)%%c" %%a%%b%%c

GOTO :EOF

为了测试目的,所需的REN命令仅为ECHO在您确认命令正确后,将ECHO REN更改为REN以实际重命名文件。

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}

因此,FOR ... DO (block)将在遇到IF (something) else (somethingelse)时使用%variables%的值执行。

解决此问题的两种常见方法是1)使用IF并使用setlocal enabledelayedexpansion代替!var!来访问已更改的%var%或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

答案 2 :(得分:0)

简单但可以从包含要重命名的文件的文件夹中使用。

@echo off
title Rename Bat
echo This bat must be in the folder that 
echo contains the files to be renamed.
:begin
echo Enter File Name
set /p old=
echo Enter New Name
set /p new=
ren "%old%" "%new%"
echo File Renamed
ping -n 3 127.0.0.1 >NUL
goto begin

答案 3 :(得分:-1)

一种更简单的方法...尝试循环遍历文件夹中所有文件的for循环

我将使用lol作为问题中所述的括号内三个字母单词的示例

@echo off

for(%)in(*)do(

重命名" %% a" "一个%%(LOL)的.exe"

要使用此批处理文件,您必须将其放在包含您要重命名的文件的文件夹中