2014-02-20 136 views
1

我正在使用腳本來自動添加用戶。我想從目錄中的所有CSV文件讀取,直到它們完成,然後我想將這些csvs移動到存檔。在程序中,我正在檢查一個txt文件,以確保該程序的另一個實例尚未運行。之後,我允許代碼運行或程序結束。當我運行帶有一個或兩個名爲test.csv和test2.csv的測試文件的程序時,我沒有任何錯誤。一旦我添加隨機名稱.csv並嘗試運行這些通過我得到import-csv無法找到該文件的錯誤,路徑是告訴我在它的文件沒有正確的,它從腳本的位置。導入CSV問題powershell

這裏是我的代碼:

$fileDirectory = "c:\test"; 

$CheckRun = Get-Content c:\test\checkrun.txt 
Write-Host $($CheckRun) 

if($CheckRun -eq "notrunning") { 

    Get-ChildItem $fileDirectory -Filter *.csv | Foreach-Object { 
     $list= Import-Csv $_ 
     $State = "running" 
     $basename = $_.BaseName 
     $file = $FileDirectory + "\" + $basename + ".csv" 
     $ArchiveFile = $fileDirectory + "\archive\" + $basename + "old.csv" 
     foreach ($entry in $list) { 
      # will run command here using the entries from the CSVs 
      write-Host $($entry.EMAIL) $($entry.FIRSTNAME) $($entry.LASTNAME) $($entry.PASSWORD) 
     } 

     Move-Item $($file) ${ArchiveFile} -force 

     Write-Host "Press any key to continue ..." 

     $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 
     $State > c:\test\Checkrun.txt 

    } 

    $State = "notrunning" 
    $State > c:\test\Checkrun.txt 
    Write-Host "Press any key to continue ..." 

    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 
} 
else { 
    Write-Host "Press any key to continue ..." 

    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 
    exit 
} 

回答

1

當你得到你得到一個文件對象的子項。嘗試referenceing的全名,而不是它workd對我來說:

Get-ChildItem $fileDirectory -Filter *.csv | Foreach-Object { 
     $list= Import-Csv $_.fullname 

否則,它試圖在正在運行的腳本文件而不是C的路徑看:\測試\ filename.csv

+0

就解決我的問題,我可以告訴它是想引用我運行的文件路徑,但我不知道正確的語法。我還注意到它部分工作的原因是我有一個與腳本相同的文件夾中的前兩個CSV副本。謝謝, –