我试图创建一个批处理文件来重命名文件夹中的一堆文件。这些文件会有一些类似的命名:blah(lol).txt。总是会有四个字母,然后是一个开放的括号,三个字母,最后是一个右括号。批量重命名文件的最后几个字符
我想要批处理文件删除文件的名称,即括号内的部分。重命名没有括号部分的文件。
for %%i IN (*.txt) DO (set name=%%~ni
set name2=%name:~1,4%
ren %%i %name2%)
为什么不能正常工作?
我试图创建一个批处理文件来重命名文件夹中的一堆文件。这些文件会有一些类似的命名:blah(lol).txt。总是会有四个字母,然后是一个开放的括号,三个字母,最后是一个右括号。批量重命名文件的最后几个字符
我想要批处理文件删除文件的名称,即括号内的部分。重命名没有括号部分的文件。
for %%i IN (*.txt) DO (set name=%%~ni
set name2=%name:~1,4%
ren %%i %name2%)
为什么不能正常工作?
@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%
将在该块被解析时由该变量的值取代 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)
。
因此,在遇到IF
时,将使用%variables%
的值执行IF (something) else (somethingelse)
。克服这个
两种常用方法是:1)使用setlocal enabledelayedexpansion
并使用!var!
代替%var%
访问的var
改变的值或2),以调用一个子程序使用改变的值来执行进一步的处理。
Magoo提供了一个解释,为什么你的脚本失败,以及一个工作脚本。
但在你的情况下,不需要脚本。一个简单的REN命令就是所有需要的:
ren "????(???).txt" "????.*"
简单,但工作从文件夹与待重命名的文件。
@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
一个更简单的方法...尝试一个for循环,通过你的文件夹中的所有文件循环
我打算用笑作为括号内三个字母词的例子作为说明你的问题
关闭@echo
为%%一中(*)做(
重命名 “%%一”, “一%%(笑).EXE”
)
使用你必须把它包含你要的文件的文件夹在此批处理文件重命名
是的,除非他们想*删除*括号内的一部分,而不是添加它。你也错过了'%% a'会引用完整名称的事实,包括扩展名,所以'(lol)。在你的脚本中的EXE''不会取代原来的扩展名,而是在它后面追加。 –