我需要帮助在脚本中创建一个函数,并在调用该函数的同一个脚本中。我测试了这段代码:
function FUNC1() {
$source="C:\Folder\file.txt"
$destination="\\Server\folder"
$searchFiles = Get-Content "$source"
foreach($filename in $searchFiles){
Test-Path $destination\$filename
}
}
function FUNC2() {
$source="C:\Folder\file.txt"
$destination="\\Server\folder"
$searchFiles = Get-Content "$source"
foreach($filename in $searchFiles){
Move-Item C:\folder\$filename $destination -force
}
}
if (!(FUNC1)) {FUNC2}
但是,当测试FUNC1为false时,它不会移动任何东西。当我单独运行函数中的代码时,一切正常。把它们放在一起作为功能,它不起作用。我不想创建一个单独的function.ps1来调用,我宁愿在代码中调用我的函数。谢谢!
答案 0 :(得分:1)
FUNC1
中有两个或更多文件名, $searchFiles
将返回一个数组(布尔值)。
这总是正确的,即使它只包含多个$false
值(因为您正在测试数组,而不是它包含的值)。否定此内容(!
)将始终为$false
,因此永远不会执行if
的内容。
你的方法看起来很奇怪,在那里执行所有测试,然后移动任何测试显示的文件。我原以为是这样的:
Get-Content "$source" |
Where-Object { -not (Test-Path $destination\$_) } |
Foreach-Object { Move-Item C:\folder\$_ $destination }
将迭代$source
中的所有行,忽略目标中存在该文件的文件并将文件移动到目的地的情况。
答案 1 :(得分:0)
你的语法令人困惑,“!(FUNC1)”将永远是$ false。 FUNC1的结果是可变的(数组类型),而不是$ null,将被视为真,所以!(FUNC1)将是$ false。您可以将这两个函数合并为一个:
function FUNC1() {
$source="C:\Folder\file.txt"
$destination="\\Server\folder"
$searchFiles = Get-Content "$source"
foreach($filename in $searchFiles){
if(-not (Test-Path $destination\$filename))
{
Move-Item C:\folder\$filename $destination -force
}
}
}