您的示例显示您通过递归浏览桌面上的文件夹来创建文本文件。您不需要循环遍历文本文件;您可以使用它,但假设您确实生成了您所说的短名称的文本文件。
$short_file_names = Get-Content C:\Path\To\500_Short_File_Names_No_Extensions.txt
现在您可以通过两种方式遍历该数组:
使用foreach
关键字:
foreach ($file_name in $short_file_names) {
# ...
}
或使用ForEach-Object
cmdlet:
$short_file_names | ForEach-Object {
# ...
}
最大的区别是当前项目将是第一个$file_name
中的命名变量和第二个中的非命名内置$_
变量。
假设您使用第一个。您需要查看是否$file_name
在第二个文件中,如果是,则记录您找到它。可以这样做。我已经在解释每个部分的代码中添加了注释。
# Read the 1000 names into an array variable
$full_file_names = Get-Content C:\Path\To\1000_Full_File_Names.txt
# Loop through the short file names and test each
foreach ($file_name in $short_file_names) {
# Use the -match operator to check if the array contains the string
# The -contains operator won't work since its a partial string match due to the extension
# Need to escape the file name since the -match operator uses regular expressions
if ($full_file_names -match [regex]::Escape($file_name)) {
# Record the discovered item
$file_name | Out-File C:\Path\To\Found.txt -Encoding ASCII -Append
}
}