我試圖創建一個批處理文件來重命名文件夾中的一堆文件。這些文件會有一些類似的命名: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''不會取代原來的擴展名,而是在它後面追加。 –