Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何创建2个循环?_File_Loops_Powershell_Foreach - Fatal编程技术网

File 如何创建2个循环?

File 如何创建2个循环?,file,loops,powershell,foreach,File,Loops,Powershell,Foreach,我有一个带有NetworkID和NewFileName字段的csv文件。我在文件共享上有一堆文件。以domain_networkid_Lthumb.jpg命名的文件共享下的文件名 想法是从csv中读取每一行,然后使用contains(我猜)查找文件。如果发现一个文件至少包含networkid\u lthumb,则将该文件重命名为NewFileName.jpg 最好的方法是什么?我有以下代码。我只是想让它更有效率 # Renames file based on CSV $csvFile = Imp

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

想法是从csv中读取每一行,然后使用contains(我猜)查找文件。如果发现一个文件至少包含networkid\u 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中的新文件名必须包含文件扩展名(例如“.jpg”)

-contains
用于测试集合(例如数组)是否包含值。 在if语句中尝试进行的布尔比较应如下所示:

if($variable){}
如果
$variable
为真,则将执行该块

关于您的代码:

$file = Get-Content $files.FullName
将实际获取目录C:\eepics\

$ContainsWord = $file | %{$_ -match $keyword}  
将逐行遍历您获得的所有文件的所有内容,并查看是否有与$keyword匹配的内容


更新:由于用户请求,在重命名后添加了复制文件的代码

如果我理解正确,您希望获取名称与networkid和用户名+“\u LThumb”匹配的所有文件并重命名它们吗?如果用户名+\u lthumb匹配或包含NetworkID,则代码不会执行预期的操作,然后重命名文件。我们应该使用新文件名包含而不是匹配,因为文件共享中的文件包含域名前缀,并且它会发生变化。您好,格林,让我们在聊天中澄清这一点:很抱歉,但我仍然不确定您是否要查找名为“username\u lthumb”的文件,或者是否要在文件内容中搜索此字符串。请澄清并在可能的情况下提供示例值。实际文件名类似于此domainA_username_LThumb.jpg或domainC_username2_LThumb.jpg等。csv文件具有实际的网络id或用户名,但没有域。所以,如果networkid的文件名与fileshare中的文件名匹配,那么就重命名为rename.cool。让我明天早上试一试。我会让你知道的。谢谢你,保罗