尝试在 Powershell 中获取最新的文件夹名称
Trying to get latest folder name in Powershell
我正在尝试 运行 从 powershell 的 nuint 控制台到 运行 我的应用程序上的一些 Selenium 测试。
Powershell中的命令如下:
$command = 'D:\tools\NUnitTestRunner\nunit3-console.exe "\myserver\Drops\MyProj\MyApp_20170214.1\App.Selenium.Tests.dll"'
iex $command
这按预期工作。但是,我要更改的部分在双“”中。我想 运行 我的回归测试,当一个版本被放到文件夹时,一个新的 App.Selenium.Test.dll 将被删除 - 文件夹 MyApp_DATE.DropNumber 将改变。
所以我可能在 \myserver\Drops\MyProj\ 路径下有如下文件夹:
MyApp_20170214.1
MyApp_20170214.2
MyApp_20170214.3
MyApp_20170214.4
我想动态获取最新的文件夹并将其放入命令中,而不是每次都进入并对其进行硬编码。这是我试过的:
$logFile = "$PSScriptRoot\NunitLog.txt"
$dir = "\myserver\Drops\MyProj\"
#Go get the latest Folder Name
$latest = Get-ChildItem $dir Where { $_.PSIsContainer } | Sort CreationTime -Descending | Select -First 1
#remove old log file
if(Test-Path $logFile) { Remove-Item $logFile }
"Starting Selenium Tests" | Out-File $logFile -Append
$latest.name | Out-File $logFile -Append
#Start nUnit Console and pass argument which is the latest path to the dll of the tests
#$command = 'D:\tools\NUnitTestRunner\nunit3-console.exe "$latest.name"'
但是,它不会将文件夹名称输出到日志文件或 运行在命令中
您的代码在填充 $latest 时缺少 dir 和 Where 之间的管道。此外,$命令行应将整个字符串用双引号括起来,因为当用单引号括起来时,PowerShell 会将其视为字符串文字。为了在结果命令中包含双引号,我们在它们之前添加了一个反引号。我们还用 $()
包装 $latest.name
以允许 PowerShell 进行评估 - 否则我们最终会得到文件夹名称末尾有 .name
的文件夹名称。
$logFile = "$PSScriptRoot\NunitLog.txt"
$dir = "\myserver\Drops\MyProj\"
#Go get the latest Folder Name
$latest = Get-ChildItem $dir | Where { $_.PSIsContainer } | Sort CreationTime -Descending | Select -First 1
#remove old log file
if(Test-Path $logFile) { Remove-Item $logFile }
"Starting Selenium Tests" | Out-File $logFile -Append
$latest.name | Out-File $logFile -Append
#Start nUnit Console and pass argument which is the latest path to the dll of the tests
#$command = "D:\tools\NUnitTestRunner\nunit3-console.exe `"$($latest.name)`""
我正在尝试 运行 从 powershell 的 nuint 控制台到 运行 我的应用程序上的一些 Selenium 测试。
Powershell中的命令如下:
$command = 'D:\tools\NUnitTestRunner\nunit3-console.exe "\myserver\Drops\MyProj\MyApp_20170214.1\App.Selenium.Tests.dll"'
iex $command
这按预期工作。但是,我要更改的部分在双“”中。我想 运行 我的回归测试,当一个版本被放到文件夹时,一个新的 App.Selenium.Test.dll 将被删除 - 文件夹 MyApp_DATE.DropNumber 将改变。
所以我可能在 \myserver\Drops\MyProj\ 路径下有如下文件夹:
MyApp_20170214.1
MyApp_20170214.2
MyApp_20170214.3
MyApp_20170214.4
我想动态获取最新的文件夹并将其放入命令中,而不是每次都进入并对其进行硬编码。这是我试过的:
$logFile = "$PSScriptRoot\NunitLog.txt"
$dir = "\myserver\Drops\MyProj\"
#Go get the latest Folder Name
$latest = Get-ChildItem $dir Where { $_.PSIsContainer } | Sort CreationTime -Descending | Select -First 1
#remove old log file
if(Test-Path $logFile) { Remove-Item $logFile }
"Starting Selenium Tests" | Out-File $logFile -Append
$latest.name | Out-File $logFile -Append
#Start nUnit Console and pass argument which is the latest path to the dll of the tests
#$command = 'D:\tools\NUnitTestRunner\nunit3-console.exe "$latest.name"'
但是,它不会将文件夹名称输出到日志文件或 运行在命令中
您的代码在填充 $latest 时缺少 dir 和 Where 之间的管道。此外,$命令行应将整个字符串用双引号括起来,因为当用单引号括起来时,PowerShell 会将其视为字符串文字。为了在结果命令中包含双引号,我们在它们之前添加了一个反引号。我们还用 $()
包装 $latest.name
以允许 PowerShell 进行评估 - 否则我们最终会得到文件夹名称末尾有 .name
的文件夹名称。
$logFile = "$PSScriptRoot\NunitLog.txt"
$dir = "\myserver\Drops\MyProj\"
#Go get the latest Folder Name
$latest = Get-ChildItem $dir | Where { $_.PSIsContainer } | Sort CreationTime -Descending | Select -First 1
#remove old log file
if(Test-Path $logFile) { Remove-Item $logFile }
"Starting Selenium Tests" | Out-File $logFile -Append
$latest.name | Out-File $logFile -Append
#Start nUnit Console and pass argument which is the latest path to the dll of the tests
#$command = "D:\tools\NUnitTestRunner\nunit3-console.exe `"$($latest.name)`""