Windows服務器下PowerShell命令往服務器共享文件夾進行文件拷貝、循環文件重命名


  由於項目需要,接觸到了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)
  }

  說明:其中涉及到的語法

  1.   判斷文件是否存在:test-path 路徑(示例見上)
  2.   刪除文件:Remove-Item 路徑(示例見上)
  3.   重命名文件:Rename-Item $_ -NewName ($_.Basename.Replace("要替換的字符串","想要替換成的字符串") + $_.extension)

  ★其中要說的是test-path這個命令,我一直百度的是“shell命令判斷文件是否存在”,但是百度出來的語句在powershell里面一直執行失敗。浪費了很多時間自己找答案,后來有經驗的同事說搜“powershell命令判斷文件是否存在”,結果...就出來了...

  也是不知道shell與powershell的區別,自然的以為shell=powershell...

  卡住的點也是很迷離...

  總體來說,目前需要的批處理命令僅需要上述這些,不足之處還望各位批評指正。

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM