在Powershell 7中使用数组创建符号链接或复制文件

3bygqnnd  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(156)

有一个存储库目录$RepositoryDIR,它在不同的子目录中包含许多文件。
我只想创建符号链接到我在$FileNames2Link数组中指定的文件名。链接必须在$DestinationDirs数组中指定的几个目录中创建。换句话说,所有指定的目录必须包含指向相同文件的相同链接。
我不能让这个脚本处理数组,尽管当我分别指定目录和文件名时它可以工作。

$RepositoryDIR = 'C:\REPOSITORY'
$DestinationDirs = @("C:\DEST1","C:\DEST2","C:\DEST3")
$FileNames2Link = @('File1.txt','File2022.png','File108.jpg')

(Get-ChildItem $RepositoryDIR -Recurse -Include $FileNames2Link) | ForEach-Object {
    New-Item -ItemType SymbolicLink -Path $DestinationDirs'\'$FileNames2Link -Target $_
}

如何让这个脚本处理数组?

fcg9iug3

fcg9iug31#

没有powershell表达式可以做到这一点(字符串乘法?)。这段代码将合并所有的文件和目录。-pv也是-pipevariable。创建数组不需要@()。%也是foreach-object。-pv需要显式地放入write-output。

$DestinationDirs = 'C:\DEST1\','C:\DEST2\','C:\DEST3\' # ending slash added
$FileNames2Link = 'File1.txt','File2022.png','File108.jpg'

$DestinationDirs * $FileNames2Link

Cannot convert the "System.Object[]" value of type "System.Object[]" to type 
  "System.UInt32".
At line:1 char:1
+ $DestinationDirs * $FileNames2Link
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : ConvertToFinalInvalidCastException

# op_Multiply() for [string]?
function multiplyString {
  param($string1s, $string2s)
  write-output $string1s -pv string1 |
    % { $string2s | % { $string2 = $_; $string1 + $string2 } } 
}

$paths = multiplystring $DestinationDirs $FileNames2Link
$paths

C:\DEST1\File1.txt
C:\DEST1\File2022.png
C:\DEST1\File108.jpg
C:\DEST2\File1.txt
C:\DEST2\File2022.png
C:\DEST2\File108.jpg
C:\DEST3\File1.txt
C:\DEST3\File2022.png
C:\DEST3\File108.jpg

相关问题