@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
:: read parameters
SET "filename1=%~1"
SET "filename2=%~2"
IF DEFINED filename2 GOTO name
IF NOT DEFINED filename1 GOTO :EOF
:: 1 parameter - must be filename
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO START /min "ren %%a" "%~f0" %%a
GOTO :eof
:: we have 2 parameters so rename pattern 1 to pattern 2
:name
FOR /r "%sourcedir%" %%a IN ("%filename1%*") DO CALL :process "%%a"
PAUSE
GOTO :EOF
:: Process the filenames and actually do the rename
:process
:: Name of file to be changed - name and extension of %1
SET "changeme=%~nx1"
:: REPLACE up-to-from-pattern with nothing = remainder of name/extension
CALL SET "endpart=%%changeme:*%filename1%=%%"
:: and RENAME...
ECHO(REN "%~1" "%filename2%%endpart%"
GOTO :eof
你需要改變的sourcedir
設置,以滿足您的具體情況。
修正後的數據文件
STWP01_00669087 BCBSRI-01849351
BCBSRI-01849357 2011-12-19_BCBSRI-01849357
STWP01_00669094 BCBSRI-01849369
在處理上述文件,重命名文件開始(列1的條目),以開始針對
方法(列2的條目。):
運行批處理作爲
batchname文件名
這將執行批處理,處理文件名
如何:
具有被設置爲從,設置filename1&2
到供給的參數的值開始處理的目錄名。
如果只有1被提供時,它是文件名,因此處理它線由行和START「在第一組的報價與窗口名稱」最小化的新方法/min
和與所述數據執行該同批從依次文件的每一行,然後通過轉到:eof
(結束文件 - 內置到CMD)完成
子過程都具有2個參數(例如BCBSRI-01849357 2011-12-19_BCBSRI-01849357
),所以處理前進到:name
。這將運行一個for /r
循環,從指定的源的目錄,與來自第一塔+ *
指定的名稱,並執行:process
傳遞發現作爲參數1
:process
套changeme
到所討論的文件名的文件名,通過去除計算endpart
字符串filename1
從changeme
這將提供呃,結束部分。
然後只需將提供的文件名重命名爲endpart
計算的替換名稱+。
爲了測試目的,所需的REN命令僅僅是ECHO
。 驗證命令是否正確後,將ECHO(REN
更改爲REN
以實際重命名文件。
暫停只是讓建議的變化被看到。處理完成後,將PAUSE
更改爲EXIT
。
AAMOI,運行
*batchname* STWP01_00669094 BCBSRI-01849369
例如,將執行遞歸重命名從STWP01_00669094 *到BCBSRI-01849369 *
可悲的是, 「不走運」 是沒有意義的。
我對指示做了輕微的改動。測試後PAUSE
應更改爲EXIT
。
測試後,ECHO(...
行應成爲
REN "%~1" "%filename2%%endpart%"
其實際執行的重命名。如果您剛刪除該行,則會解釋不可見結果。
恢復原始代碼並通過小代表性僞子樹進行驗證後,更改echo(...
行並再次測試。文件名應該更改。如果不是,那麼某件事是非常錯誤的。不用說,這對我來說非常滿意...
然後再試一次,PAUSE
更改爲EXIT
。這一次,生成的窗口將顯示在任務欄上,然後在輸入文件的該行重命名完成時消失。例如BCBSRI-01849357 rentwo
會發生一次 - 每個文件rename
都不會發生一次。
硬編碼的文件名,刪除行
IF NOT DEFINED filename1 GOTO :EOF
並更換
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO START /min "ren %%a" "%~f0" %%a
與
FOR /f "usebackqdelims=" %%a IN ("YOURFILENAMEHERE") DO START /min "ren %%a" "%~f0" %%a
對於 「運行從這裏」 命令,改變
SET "sourcedir=U:\sourcedir"
到
SET "sourcedir=."
.
意味着 「當前目錄」
如果你把thisbatchfilename.bat到任意目錄上您PATH那麼你可以簡單地通過執行thisbatchfilename運行程序。
您可以在提示符下輸入
path
顯示你的路徑。 PATH是如果在當前目錄中找不到可執行文件,Windows搜索的目錄序列。爲了提供路徑,谷歌「改變路徑窗口」 - 有經驗的批處理程序在批處理文件的路徑上創建一個單獨的目錄。有時,他們將目錄命名爲「鐘樓」。
你有沒有考慮過PowerShell?如果你有系統的重命名方式,那麼你可以在PowerShell腳本中編寫它,如果你可以提供實際的文件名和它應該重命名爲csv文件的名字,那麼PowerShell腳本可以實現它。 如果您給我們舉例說明如何重命名它,那麼可能有人可以給你一些代碼。 – Junaid
查看[這個答案](http://stackoverflow.com/questions/8397674/windows-batch-file-looping-through-directories-to-process-files/8398621#8398621)爲另一種更簡單的方法來做到這一點... – Aacini