簡體   English   中英

如何通過批處理腳本批量重組文件名

[英]How can I restructure file names on bulk via batch script

我在一台 Windows 10 機器上有 324 個文件,它們按以下模式命名:

[7 Numbers] [Space] [Last name] [Space] [First name]

我需要他們是:

[Last name] [Space] [First name] [Space] [7 Numbers] 

我做了一些快速研究,發現我可以使用“重命名”function 編寫批處理腳本:

@echo off
rename “y:\*.txt” “???-Test1.*”

但是,我無法找到如何對腳本進行編程以獲取前 7 個字符並將它們放在最后。

任何幫助表示贊賞。

考慮到關於你的結構的確切格式的小細節,即如果姓氏像van Halen這樣現在也包含一個空格的分裂會發生什么:無論如何,這將迎合你所提到的情況,而不是包含空格的名稱/姓氏。

@echo off
for /f "tokens=1-3*" %%i in ('dir /b /a-d *.txt ^| findstr /R "^[1-9]"') do echo ren "%%i %%j %%k" "%%~nk %%~nj %%~ni%%~xk"

請注意,此示例將簡單地echo顯命令而不執行實際的重命名。 在進行重命名之前,您需要先對其進行測試。 一旦您對打印到控制台的結果感到滿意,然后從該行中刪除echo

筆記。 findstr在這里很重要,因為我們只需要在文件以數字開頭時執行操作。 如果你想更具體,你可以定義更多的findstr過濾器。 在這里我只關注任何.txt文件開頭的數字,考慮到名字或姓氏不應該以數字開頭。,除非你是 50cent 或其他隨機說唱歌手。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
rem The following setting for the source directoryis a name
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files\t w o"

FOR %%b IN ("%sourcedir%\??????? * *.txt") DO FOR /f "tokens=1*delims= " %%u IN ("%%~nb") DO SET /a junk=0&SET /a "junk=1%%u" 2>nul&IF !junk! geq 10000000 IF !junk! leq 19999999 ECHO REN "%%b" "%%v %%u.txt"

GOTO :EOF

請注意,此例程使用delayedexpansion

第一個for將與掩碼匹配的每個文件的絕對文件名放入%%b

第二個將文件名( %%~nb )的名稱部分划分為第一個空格(標記 1)到%%u和其余部分(標記 *)到%%v之前的那個部分

然后將junk設置為 0,然后重置為1%%u的值。 如果%%u不是數字字符串( 2>nul抑制錯誤消息), set /a將保持junk不變(因此為 0),因此如果%%u是數字,則junk將設置為10000000 ... 19999999

使用!junk! 要訪問junk的運行時值,請檢查它是否在范圍內,如果是,則echo顯所需的ren

檢查結果報告以實際重命名文件后,刪除ren之前的echo關鍵字。

暫無
暫無

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

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