gpt4 book ai didi

function - Powershell:为什么这个功能不起作用?

转载 作者:行者123 更新时间:2023-12-03 06:37:24 26 4
gpt4 key购买 nike

我正在尝试制作一个具有整齐布局的函数的脚本,用于比较两个文件夹项目。程序:

  1. 提示用户输入文件路径
  2. 检查文件名是否不同
  3. 检查文件大小是否不同

作为测试,我一直在将同一文件夹与其自身进行比较(输出应该是 false, false)。当将步骤 1 ( $referencepath ) 设为函数 ( FolderPrompt ) 时,我的程序无法正常工作,我的意思是我几乎每次运行它时都会得到不同的答案。

这有效:

$referencePath = Read-Host -Prompt "Enter new DTNA folder path to check" 

NameDisc
SizeDisc

function NameDisc {
write-host "Name Discrepancy: " -NoNewline

if (Compare-Object -Property name (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
{return $true}
else
{return $false}
}

function SizeDisc {
write-host "Size Discrepancy: " -NoNewline

if (Compare-Object -Property length (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
{return $true}
else
{return $false}
}

但这并不:

FolderPrompt
NameDisc
SizeDisc

function FolderPrompt {
$referencePath = Read-Host -Prompt "Enter new DTNA folder path to check"
}

function NameDisc {
write-host "Name Discrepancy: " -NoNewline

if (Compare-Object -Property name (Get-ChildItem $referencePath) -DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
{return $true}
else
{return $false}
}

function SizeDisc {
write-host "Size Discrepancy: " -NoNewline

if (Compare-Object -Property length (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
{return $true}
else
{return $false}
}

我已经尝试过:

  • 在调用函数之前声明函数

  • 推杆$referencePath = 0每次重置该值认为这就是问题所在

  • 推杆Return $referencePath在不同函数的末尾

我最好的猜测是我需要做类似 function <name> ($referencePath) 的事情传递变量(?)。

最佳答案

$referencepath 一旦分配给函数,就成为函数的本地函数,因此它的值会丢失,因为您不返回它。你说你尝试在“各种函数”中返回它,但不清楚它是什么样的。

您也不应该依赖从其父作用域继承变量的函数。理想情况下,您可以将任何需要的信息作为参数传递。

在 PowerShell 中调用函数时,参数不要使用括号和逗号,而应使用空格。

function FolderPrompt {
Read-Host -Prompt "Enter new DTNA folder path to check"
}

function NameDisc {
param($referencePath)

write-host "Name Discrepancy: " -NoNewline

if (Compare-Object -Property name (Get-ChildItem $referencePath) -DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
{return $true}
else
{return $false}
}

function SizeDisc {
param($referencePath)

write-host "Size Discrepancy: " -NoNewline

if (Compare-Object -Property length (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
{return $true}
else
{return $false}
}

$refPath = FolderPrompt
NameDisc -referencePath $refPath
SizeDisc -referencePath $refPath

这就是修改后的代码的样子。

关于function - Powershell:为什么这个功能不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50517567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com