簡體   English   中英

Powershell文件夾創建

[英]Powershell folder creation

我有一個Powershell腳本,可以根據每個學生的學生編號在我們的NAS上創建文件夾。 文件夾的名稱來自我從服務器導入的.csv文件。 這就是我得到的:

Set-Location "C:\studentdata"

$StudFolders = import-csv \\servername\datafolder\studfolders.csv

ForEach ($StudFolders in $StudFolders) {


   if(Test-Path -Path C:\Studentdata\$StudFolders) { 

     New-Item $StudFolders.Name -type directory 

}else{

     "Folders already created" 

}
}

如果我只運行一次,則此腳本效果很好。 如果再次運行它,則在控制台窗口中會出現有關已存在文件夾的錯誤。 我想做的是利用腳本的IF部分捕獲錯誤,但是我不確定我是否正確使用了Powershell的IF。 如果我用更多的學生編號編輯.csv,這將有所幫助,它將顯示無誤。

有人可以指出我正確的方向嗎?

編輯:

這就是我在studfolders.csv中擁有的

Name
2003040052
2003060213
2003060310
2003060467

讓我們看看您的邏輯:

  1. 您正在使用if語句,如果返回true,則該語句有效
  2. 您正在使用test-path cmdlet,如果存在某些內容,則返回true

看到問題了嗎? 反之亦然:

if (!(test-path ...)) { ... } # ! - is the operator to invert true to false

或者你可以if和else內容切換,所以當if執行返回“已創建的文件夾”,而其他人創建的文件夾

就編碼風格而言,我將避免使用相同的變量名和不同的語義,如($ Studfolders中的$ Studfolders)。 這樣的代碼很難在幾個月后閱讀。 我通常對集合中的每個對象使用單數形式,例如($ Studfolders中的$ Studfolder)。 但是,如果您的風格適合您,那么可以。

先前的答案已經指出您的邏輯是倒退的。 您需要扭轉它。

接下來,在我看來,您好像並沒有訪問循環中每個項目的組件。 當您執行Import-Csv時,會發生以下幾件事:csv文件中的第一條記錄被視為標頭,為后面的字段提供名稱。 如果您的csv文件中確實有一個標頭,則從每個項目中檢索第一個字段時,即使它是唯一字段,也需要引用它。

import-csv的結果是一組自定義對象。 每個自定義對象看起來都像一個包含鍵,值對的哈希表。 這樣的事情可能會起作用

Set-Location "C:\studentdata"

$StudFolders = import-csv \\servername\datafolder\studfolders.csv

ForEach ($StudFolder in $StudFolders) {
   if(Test-Path -Path C:\Studentdata\$StudFolder.Name) { 
     "Folders already created" 
   }else{
      New-Item $StudFolder.Name -type directory 
   }
}

我假設Csv文件中的第一條記錄如下所示:

"Name"

這就是為什么我將該字段引用為$ Studfolder.Name”的原因

如果不是這種情況,您將不得不做一些不同的事情。

嘗試使用腳本進行所有操作后,我無法捕獲該錯誤。 我決定問我的經理,他想出了以下解決方案,該解決方案效果很好,可以發現錯誤。

import-csv '\\servername\datafolder\studfolders.csv'|ForEach-Object -process {

  $path =$_.Name
  $path='C:\Studentdata\'+$path
  if (Test-Path -Path $path){

    "Folder already created"

} else {

   New-Item $path -type directory

}

}

感謝@Walter Mitty和@ 4c74356b41的幫助,試圖找到答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM