小编Och*_*use的帖子

在 PowerShell 中匹配字符串

这个问题要点是:

所以似乎将字符串的部分匹配if ($C -match $b.Name)视为匹配?有没有更好的方法来强制字符串的完整[匹配]?

我有一个目录,里面装满了大量的 .7z 文件。我需要不断清理这个目录。还有另一个脚本,它早于我在这里的工作,目前正在工作,但它由 3000 行组成,并且不断生成不正确的匹配,并且不记录移动或删除的内容。使它如此庞大的部分原因是它有大量的路径,这些文件需要移动到硬编码的位置。有时,这些路径会发生变化,更新起来很麻烦。

所以我开始制作一个小得多的脚本,它在 CSV 文件中引用了所有这些路径。除了这些路径之外,CSV 文件中还记录了已知的文件名。

我正在尝试将文件名与我的 CSV 文件中记录的名称进行匹配。它通常有效,但有时我会得到不正确的匹配。

假设我有两个以类似方式启动的文件,Apple 和 Apple_Pie。Apple 会匹配 Apple 并移动到正确的目录,但 Apple_Pie 将首先匹配 Apple 并移动到错误的目录。在$C清除变量之前,它将 Apple_Pie 匹配到正确的目录,但此时 Apple_Pie 不再存在于需要从中移动的原始目录中。

所以似乎将if ($C -match $b.Name)字符串的部分匹配视为匹配?有没有更好的方法来强制完成一个字符串?

我认为我对-match应该如何工作的期望有点偏离。

我在这里使用的正则表达式是去除由另一个自动化进程添加到文件名中的日期时间的每个文件名。我用它来隔离我想要匹配的文件名。

$Wild = "C:\Some\Folder\With\Files\"

$CSV = "C:\Another\Folder\Paths.csv"

$Content = gci $wild

$Reg1 = [regex] '_[0-9]{4}-[0-9]{2}-[0-9]{2}[A-Z]{1}[0-9]{2}_[0-9]{2}_[0-9]{2}'

$Reg2 = [regex] '[0-9]{4}-[0-9]{2}-[0-9]{2}[A-Z]{1}[0-9]{2}_[0-9]{2}_[0-9]{2}'

$Paths = import-csv -path $CSV -header Name, Path

foreach ($a …
Run Code Online (Sandbox Code Playgroud)

regex powershell string-matching

5
推荐指数
2
解决办法
3万
查看次数

.Net 秒表和 Powershell

我有一个 powershell 脚本,目前通过任务调度程序每 4 小时运行一次。它会清理驱动器,完成后它会向我发送一封电子邮件,告诉我它移动了什么以及执行此任务所需的时间和位置。

但是,我似乎对它最后显示的时间有问题。我最近收到一封电子邮件,说它花了 4 分钟,而我知道它花了将近 30 分钟。

基本结构如下所示:

$StopWatch = new-object system.diagnostics.stopwatch
$StopWatch.Start()

Do { All this stuff }       
While(This condition is false)

$StopWatch.Stop()
$Minutes = $StopWatch.elapsed.minutes
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?这东西只是读取系统时间,然后在.elapsed访问时将其与当前时间进行比较,对吗?

.net powershell stopwatch

3
推荐指数
1
解决办法
3583
查看次数

查找30天的文件

我已经创建了一个脚本来查找一定天数的文件.我正在使用它来查找30天以前的文件,但是如果我需要插入不同的时间,我正试图让它保持打开状态.

在为脚本的这一部分提供您想要的信息之后,应该创建一个符合条件的所有文件的文本文件.我可以找到-lt-gt/ -le-ge当我尝试使用的文件时-eq,我没有得到任何结果.有关下面列出的部分脚本有什么问题的想法吗?

$Path = Read-Host "What path should I look at?"
$DaysOld = Read-Host "How many days old should the files I'm looking for be?"
$Currentdate = Get-Date
$Targetdate = $Currentdate.AddDays(-$DaysOld).ToString('MM-dd-yyyy')
Write-Host "The target date is $targetdate"
$SourceFolder = $Path
$files = Get-ChildItem $Path -Recurse |
         Where-Object { $_.LastWriteTime -eq $Targetdate } |
         Where-Object { $_.PSIsContainer -eq $false } |
         ForEach-Object { $_.FullName } |
         Out-File $outfileCopy
Run Code Online (Sandbox Code Playgroud)

powershell

0
推荐指数
1
解决办法
68
查看次数

标签 统计

powershell ×3

.net ×1

regex ×1

stopwatch ×1

string-matching ×1