[英]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.