1. 程式人生 > >Windows Batch Script用於機器叢集檔案分發

Windows Batch Script用於機器叢集檔案分發

先交代下背景,我們UI自動化有十幾臺機器,有一些配置檔案需要放到每一臺機器的某個路徑下,重複性很高,很繁瑣

新時代的青年接受不了這種手工重複勞動,所以花了一個晚上弄了個windows batch指令碼。老實說,windows batch真的很不習慣,毫無基礎,每一行都是現搜尋現寫,如果是用Python就會便利很多,但是windows batch適用性更強,只要是個windows機器就能跑起來。

指令碼工作原理:將機器放配置檔案的那個盤共享出來。然後在機器叢集的某一臺機器上,手工放置新的配置檔案,指令碼也在這臺機器上。指令碼相同目錄下,有兩個輸入檔案,一個是FilePath.txt,指明瞭路徑,格式:
C:\xxx\uuu\config.xml
另一個是MachineList.txt,列出了要分發的所有機器,格式:
\\machinename_1\
\\machinename_2\
……
接下來從FilePath.txt讀取路徑,然後迴圈讀取每一行機器名,並將它和路徑進行拼接和處理,做成share folder路徑,例如\\machinename_1\C\xxx\uuu\config.xml

注意,share folder路徑裡碟符後面不能有冒號:,得去掉,指令碼第四行就是去掉冒號的。

然後判斷在目標路徑下如果存在同名配置檔案(老版本),則獲取檔案修改時間,截取出日期,在檔名前加上修改日期字首,以作備份之用。然後將新版本配置檔案copy至這個路徑。

在修改老配置檔案檔名時需注意,檔名不能包含/,有的機器上,檔案修改時間格式:11/11/2016 11:11,所以還需要將/進行處理,換成-之類的。當然,這個需要在具體機器上敲命令,看看輸出是什麼格式的,再做定奪。

@echo off

setlocal enabledelayedexpansion

set /p spath=<FilePath
.txt set tpath1=%spath::=% for /f "token=*" %%a in (MachineList.txt) do ( set tpath=%%a!tpath1! if exist "tpath" ( for %%b in (!tpath!) do ( set mdatetime=%%~tb set mdate=!mdatetime:/=-! set prefix=!mdate:0,-9! ) fro /f "delims=" %%F in('dir /a-d /b !tpath!') do ( ren !tpath! "!prefix!-%%F%" ) ) copy "
!spath!" "!tpath!" )

這個禮拜太忙,太晚睡覺,週末我要安安靜靜做一隻考拉

口乞 目垂
口乞 目垂
口乞 目垂
口乞 目垂
口乞 目垂
…..
這裡寫圖片描述