Loops pdf文件未在文件夹中移动:无法将参数绑定到参数';路径';因为它是null-ForEach对象cmdlet与ForEach循环
我使用一个脚本创建文件夹,从文本文件(.txt)中提取年份。Loops pdf文件未在文件夹中移动:无法将参数绑定到参数';路径';因为它是null-ForEach对象cmdlet与ForEach循环,loops,powershell,syntax,Loops,Powershell,Syntax,我使用一个脚本创建文件夹,从文本文件(.txt)中提取年份。我在C:\Path中有一些pdf文件,就像这样 Ben - Hur.pdf Ben 10 - Corsa contro il tempo.pdf Ben Hur - Dvd2.pdf Ben-Hur - Dvd1.pdf Bolide Rosso - Johnny Dark (1954).pdf Hard Night (Permanent Midnight).pdf The Dark Valley.pdf 相反,文件文本(Text4.
我在C:\Path中有一些pdf文件,就像这样
Ben - Hur.pdf
Ben 10 - Corsa contro il tempo.pdf
Ben Hur - Dvd2.pdf
Ben-Hur - Dvd1.pdf
Bolide Rosso - Johnny Dark (1954).pdf
Hard Night (Permanent Midnight).pdf
The Dark Valley.pdf
相反,文件文本(Text4.txt
)是
Hard Night (Permanent Midnight 1998)
Ben-Hur (1925)
Ben Hur (1959) [Storico [CURA]
Ben Hur Dvd2 (1959)
Ben Hur - Dvd1 (1959)[Top 250 - Ita Eng]
The Dark Valley (2014) [ - Ita Deu Aac] Western
Bolide Rosso - Johnny Dark (1954) [it] Azione
Ben - Hur (1959)
脚本从Text4.txt中提取年份,并使此文件夹如下
1925
1950
1998
但当它应该移动pdf文件时,powershell脚本会返回此错误
Move.Iten:无法将参数绑定到参数“Path”,因为它为null
此错误很奇怪(我使用Powershell 5)。脚本可以正确创建文件夹,但不能在其中移动文件。剧本是这样的吗
$movies = @()
(get-content C:\Path\Test4.txt) | foreach($_){
$properties = @{
date = $_.substring($_.IndexOf("(")+1,4)
name = $_.substring(0,$_.IndexOf("("))
}
write-host $date
write-host $name
$movies += New-Object PSObject -Property $properties
}
$torrentFiles = dir $torrentPath
foreach($movie in $movies){
$datePath = "C:\Path\$($movie.date)"
if(-not(test-path $datePath)) {
new-item $datePath -ItemType "directory"
}
$words = ($movie.name -split '\s') | ?{ $_.Length -gt 1}
$significant = $words.Count
foreach($torrentFile in $torrentFiles){
$matchingWords = 0
foreach($word in $words){
if($torrentFile.BaseName -match $word){
$matchingWords += 1
}
}
if($matchingWords -ge $significant){
$_ | Move-Item -Destination $datePath
}
}
}
您可以使用
Foreach
循环,然后尝试使用管道对象访问属性,就像在Foreach对象
循环中一样。您需要将$\uuuu
更改为具有实际值的内容,我猜$torrentFile
if($matchingWords -ge $significant){
Move-Item -path $torrentfile -Destination $datePath
}
您可以使用
Foreach
循环,然后尝试使用管道对象访问属性,就像在Foreach对象
循环中一样。您需要将$\uuuu
更改为具有实际值的内容,我猜$torrentFile
if($matchingWords -ge $significant){
Move-Item -path $torrentfile -Destination $datePath
}
要补充一些背景信息:
是一个cmdlet,您可以在管道中使用它来迭代处理输入,每个输入对象表示为自动变量ForEach对象
。您可以将其视为一个隐式循环$\ucode>或
$PSItem
是一个语言关键字,它启动流控制语句,用于在脚本中编写显式循环;选择迭代变量的名称以及要循环的集合,例如foreach
foreach($move in$movies){…}
- 不能(直接)在管道中使用
语句foreach
$在
循环中没有意义foreach
- 不能(直接)在管道中使用
ForEach对象
cmdlet(也称为ForEach
)提供别名这一事实有点令人困惑
如果使用foreach
,PowerShell会从解析上下文中知道您是在引用cmdlet还是language关键字-请参阅
cmdlet是以所谓的参数模式进行解析的,粗略地说,就是命令行语法:命令名后跟空格分隔的参数。(另一种模式类似于传统编程语言,即表达式模式)
请注意,您尝试使用
。|foreach($){…}
实际上通过其foreach
别名调用了foreach对象
cmdlet,尽管-externeous-($)
部分碰巧使它看起来像foreach
语句
再次说明:$\u
自动设置为手头的管道对象-无需声明迭代器变量
您的命令的($)
部分实际上被悄悄地忽略了(实际上,它最终将
$null
-因为$\u
在脚本块之外的那一点上没有值-绑定到-Begin
脚本块,这是一个无操作)。用一些背景信息来补充:
是一个cmdlet,您可以在管道中使用它来迭代处理输入,每个输入对象表示为自动变量ForEach对象
。您可以将其视为一个隐式循环$\ucode>或
$PSItem
是一个语言关键字,它启动流控制语句,用于在脚本中编写显式循环;选择迭代变量的名称以及要循环的集合,例如foreach
foreach($move in$movies){…}
- 不能(直接)在管道中使用
语句foreach
$在
循环中没有意义foreach
- 不能(直接)在管道中使用
ForEach对象
cmdlet(也称为ForEach
)提供别名这一事实有点令人困惑
如果使用foreach
,PowerShell会从解析上下文中知道您是在引用cmdlet还是language关键字-请参阅
cmdlet是以所谓的参数模式进行解析的,粗略地说,就是命令行语法:命令名后跟空格分隔的参数。(另一种模式类似于传统编程语言,即表达式模式)
请注意,您尝试使用
。|foreach($){…}
实际上通过其foreach
别名调用了foreach对象
cmdlet,尽管-externeous-($)
部分碰巧使它看起来像foreach
语句
再次说明:$\u
自动设置为手头的管道对象-无需声明迭代器变量
您的命令的($)
部分实际上被悄悄地忽略了(实际上,它最终将
$null
——因为$\u
在脚本块之外的那一点上没有值——绑定到-Begin
脚本块,这是一个无操作)。它可以工作!但请帮助我理解:错误是管道对象像foreach对象循环一样使用,因为它是未定义的?对于