由於項目需要,接觸到了PowerShell命令,但是苦於以前沒有接觸過,幾句話的代碼百度搜索了很長時間。
主要功能是Windows服務器下利用PowerShell命令實現文件拷貝、文件重命名(去掉文件版本號),這其中還涉及到判斷文件是否存在,刪除文件功能。
- 建立遠程連接
語法:net use \\ip\ipc$ "password" /user:"username"
例:net use \\10.100.1.1\ipc$ "aaa" /user:"administrator"
說明:原來采取的方式是利用net use連接遠程服務器,共享文件夾映射為本地磁盤M盤以后后續使用M盤處理以下操作,使用完后將該鏈接釋放。由於項目中會出現多個批處理命令一同遠程連接並映射磁盤的情況,這個時候進行磁盤映射或者使用net use del斷開連接的話會出現混亂情況。於是后續改成了不映射磁盤不中斷連接的方式。
- 文件復制
語法:xcopy 要拷貝的文件 拷貝到的具體路徑 /R /Y /e/s/k/d/f
例:xcopy ..\a\*.jar M:\CICD\jstack\apps\fssp\sp\ /R /Y /e/s/k/d/f
說明:xcopy是一個功能強大的復制指令,可以做到目錄和文件的一同拷貝。
由於本項目是在本機將文件拷貝到遠程服務器共享文件夾,所以進行了磁盤映射,例子中也是以磁盤映射為例,如果不想映射的話可以修改成具體的遠程服務器地址,但是前提條件都是要使用net use與遠程服務器建立連接。
后面復制方法具體參數說明:
/A 只復制有存檔屬性集的文件, 但不改變屬性。
/M 只復制有存檔屬性集的文件, 並關閉存檔屬性。
/D:m-d-y 復制在指定日期或指定日期以后改變的文件。如果沒有提供日期,只復制那些源時間比目標時間新的文件。
/EXCLUDE:file1[+file2][+file3]...
指定含有字符串的文件列表。如果有任何字符串與要被復制的文件的絕對路徑相符,那個文件將不會得到復制。
例如,指定如 \obj\ 或 .obj 的字符串會排除目錄 obj 下面的所有文件或帶有 .obj 擴展名的文件。
/P 創建每個目標文件前提示。
/S 復制目錄和子目錄,除了空的。
/E 復制目錄和子目錄,包括空的。 與 /S /E 相同。可以用來修改 /T。
/V 驗證每個新文件。
/W 提示您在復制前按鍵。
/C 即使有錯誤,也繼續復制。
/I 如果目標不存在,又在復制一個以上的文件, 則假定目標一定是一個目錄。
/Q 復制時不顯示文件名。
/F 復制時顯示完整的源和目標文件名。
/L 顯示要復制的文件。
/G 允許將沒有經過加密的文件復制到不支持加密的目標。
/H 也復制隱藏和系統文件。
/R 改寫只讀文件。
/T 創建目錄結構,但不復制文件。不包括空目錄或子目錄。/T /E 包括空目錄和子目錄。
/U 只復制已經存在於目標中的文件。
/K 復制屬性。一般的 Xcopy 會重設只讀屬性。
/N 用生成的短名復制。
/O 復制文件所有權和 ACL 信息。
/X 復制文件審核設置(隱含 /O)。
/Y 禁止提示以確認改寫一個現存目標文件。
/-Y 導致提示以確認改寫一個現存目標文件。
/Z 用重新啟動模式復制網絡文件
- 循環進行文件重命名
例:
$path='\\10.100.1.1\Test\'
$hz='*-1.0.0-version.jar'
dir $path$hz | foreach {
echo '當前文件重命名后的文件名'
$after=$path+$_.Basename.Replace("-1.0.0-version","")
$after=$after+'.jar'
echo '判斷該路徑下是否已存在重命名后的文件名'
if (test-path $after) {
echo '刪除原有文件再重命名'
Remove-Item $after
}
else{
echo '直接重命名'
}
Rename-Item $_ -NewName ($_.Basename.Replace("-1.0.0-version","") + $_.extension)
}
說明:其中涉及到的語法
- 判斷文件是否存在:test-path 路徑(示例見上)
- 刪除文件:Remove-Item 路徑(示例見上)
- 重命名文件:Rename-Item $_ -NewName ($_.Basename.Replace("要替換的字符串","想要替換成的字符串") + $_.extension)
★其中要說的是test-path這個命令,我一直百度的是“shell命令判斷文件是否存在”,但是百度出來的語句在powershell里面一直執行失敗。浪費了很多時間自己找答案,后來有經驗的同事說搜“powershell命令判斷文件是否存在”,結果...就出來了...
也是不知道shell與powershell的區別,自然的以為shell=powershell...
卡住的點也是很迷離...
總體來說,目前需要的批處理命令僅需要上述這些,不足之處還望各位批評指正。
