簡體   English   中英

正則表達式重命名批處理文件

[英]Regex Rename with batch for files

我想用批處理程序重命名數百個文件。 defacon 讓他們的號碼首先出現,但我對這批不太容易。 我的文件名稱示例:

3705_(2x).stl
68403_(4x).stl
6525_(2x).stl
22073_(3x).stl

至:

2x-3705.stl
2x-6525.stl
3x-22073.stl
4x-68403.stl

我努力了:

@echo off
set /p d=disque: // c:
set /p c=chemin: // \Users\celes\file
cls
%d%
cd%c%
set nb = findstr /r '[0-9]+x'
set p = findstr /r '[0-9]{2,}'
ren *.stl %nb%%p%.stl
pause>nul

您可以使用此批處理文件:

@echo off
for /F "eol=| delims=" %%I in ('dir "*_(*).stl" /A-D /B 2^>nul') do for /F "tokens=1,2 delims=()_" %%A in ("%%~nI") do ECHO ren "%%I" "%%B-%%A%%~xI"
pause

外部FOR在后台的單獨命令進程中運行命令DIR以獲取與模式*_(*).stl匹配的文件名列表,該模式在文件重命名操作期間不會更改。

外部FOR處理每個文件名的默認行為是使用水平制表符和空格作為分隔符將每一行拆分為標記,通過指定一個空的分隔符列表來禁用分隔符。

內部FOR循環僅處理雙引號中指定的每個文件名字符串。 命令FOR使用選項字符串tokens=1,2 delims=()_指示將所有括號和下划線解釋為分隔符,並將文件名字符串拆分為至少兩個子字符串。 第一個子字符串是下划線之前的數字,分配給指定的循環變量A 第二個子字符串是括號之間的字符串,根據循環變量BASCII表分配給下一個循環變量。

內部FOR執行的命令REN使用內部FOR確定的兩個子字符串將當前文件重命名為外部FOR的循環變量I中的保持文件為新名稱。

此批處理文件在命令ren之前包含命令ECHO ,僅輸出重命名命令而不是真正運行它。 因此,您可以在真正執行之前檢查批處理文件並驗證文件重命名操作。 刪除命令ECHO以真正進行文件重命名。

要了解使用的命令及其工作原理,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀每個命令顯示的所有幫助頁面。

  • echo /?
  • for /?
  • pause /?
  • ren /?

另請閱讀有關使用命令重定向運算符的 Microsoft 文章,了解2>nul的說明。 重定向運算符>必須在FOR命令行上使用脫字符^進行轉義,以便在 Windows 命令解釋器在執行命令FOR之前處理此命令行時解釋為文字字符,該命令使用在后台啟動的單獨命令進程執行嵌入式dir命令行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM