我正在尝试创建一个批处理文件,用于重命名文件夹中的一堆文件。这些文件的命名类似于:blah(lol).txt。总会有四个字母,后面是一个开括号,三个字母,最后是一个小括号。
我希望批处理文件删除文件名的括号部分,即。在没有括号部分的情况下重命名文件。
for %%i IN (*.txt) DO (set name=%%~ni
set name2=%name:~1,4%
ren %%i %name2%)
为什么这不起作用?
答案 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"
)
要使用此批处理文件,您必须将其放在包含您要重命名的文件的文件夹中