簡體   English   中英

如何創建2個循環?

[英]How to create 2 loops?

我有一個帶有NetworkID和NewFileName字段的csv文件。 我在文件共享上有一堆文件。 以domain_networkid_Lthumb.jpg命名的文件共享下的文件名。

這個想法是從csv的每一行讀取的,然后使用contains(我猜)找到文件。 如果找到至少包含networkid_lthumb的文件,則將此文件重命名為NewFileName.jpg。

做這個的最好方式是什么? 我有以下代碼。 我只是想提高效率。

# Renames file based on CSV
$csvFile = Import-csv 'c:\userdata.csv'
$files = Get-ChildItem "c:\eePics\"
foreach($user in $csvFile)
{
    $account = $user.networkid
    $keyword = $account + "_LThumb" 
    $file = Get-Content $files.FullName
    $ContainsWord = $file | %{$_ -match $keyword}   
    if($ContainsWord -contains $true)
    {       
        Rename-Item $_.name -NewName $user.NewFileName
    }
}

如果我正確理解了您要實現的目標,則應正常工作:

$csvFile = Import-csv "C:\userdata.csv"
$filePath = "C:\eepics\"
$destination = "C:\example\folder\"

foreach($user in $csvFile){
$filename = $user.networkid + "_LThumb"
Get-Childitem $filePath | where {$_.Name -match $filename} | Rename-Item -NewName $user.NewFileName
Copy-Item $filePath$($user.NewFileName) -Destination $destination
}

請注意,csv中的NewFileName必須包含文件擴展名(例如“ .jpg”)

-contains用於測試集合(例如數組)是否包含值。 布爾比較,例如您要在if語句中嘗試執行的比較,如下所示:

if($variable){}

如果$variable為True,則將執行該塊

關於您的代碼:

$file = Get-Content $files.FullName

實際上將獲取目錄C:\\ eepics \\中所有文件的內容(如果我說是內容,我是說真的)

$ContainsWord = $file | %{$_ -match $keyword}  

將逐行循環瀏覽所有文件的所有內容,並查看是否有匹配$ keyword的文件

更新:由於用戶請求,添加了重命名后復制文件的代碼

暫無
暫無

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

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