我对 PowerShell 相当陌生,并尝试做一些基本的“创建临时文件”“检查临时文件是否存在”“如果 FileExists = True/False Then”编码逻辑,我显然遗漏了一些东西,因为我没有得到一致结果。
这是我到目前为止所拥有的,问题似乎$TmpFileExists
是“重新运行”时没有更新(是否正在重新运行?)
我希望 IF 语句的第二次运行返回 ELSE 部分,但它只返回“TRUE”。
$TmpFile = New-Item -Path "$env:TEMP\jobrunning.log" -ItemType File
$TmpFileExists = (Test-Path $TmpFile) | Out-String
$DelTmpFile = Remove-Item $TmpFile -ErrorAction SilentlyContinue
IF ($TmpFileExists = "True") {$DelTmpFile ; $TmpFileExists } ELSE {Write-Host "File NOT Found"}
IF ($TmpFileExists = "True") {$DelTmpFile ; $TmpFileExists } ELSE {Write-Host "File NOT Found"}
这个想法是,如果它找到文件,删除它,重置/检查布尔值TmpFileExists
并重新运行 If 语句现在应该返回ELSE/FALSE
语句。
逐行查看:
到目前为止,一切都很好。您已经创建了文件。
$TmpFileExists 现在有一个字符串值“True” ,如果没有重新分配或其他操作,它将不会改变。引用变量不会重新评估其赋值表达式。您应该放置
Test-Path
内联或定义一个函数。您现在已经删除了 引用的文件
$TmpFile
。您的后续代码似乎假设它是一个简单的函数。该变量$DelTmpFile
的值为$Null
。正如 HelpingHand 所指出的,这些表达式正在重新分配“Ttue”的字符串值。
$True
当转换为布尔值时,任何成功的非空赋值表达式都将计算为。所以翻译,这些表达式简化为:(希望)让您的
Else
子句永远不会执行的原因显而易见。工作样本:
正如@Keith Miller 的回答所解释的那样,我试图引用一个期望它“重新评估”的变量。我决定直觉地使用函数并使一切正常。这是我最终得到的结果,但不是 100% 相同,因为我没有构建“如果其他”“删除文件”片段,但这主要是一个学习练习,我现在对自己的理解充满信心.
结果: