我已经启动了一个简单的脚本,以便将特定前缀的文件移动到同名文件夹,例如:W100_11.jpg W100_12.jpg到文件夹W100。
感谢下面的答案的帮助,我已经取得了进展,并有一个成功的循环,可以遍历文件夹文件,我遇到-filter开关的问题,并尝试使用move-item cmdlet我得到错误
目前的代码是:
$sourceDir = read-host "Please enter source Dir:"
$format = read-host "Format to look for with . :"
#$length = read-host "length of folder name:"
gci -Path $sourceDir | % {
If( -not $_.PSIsContainer)
{
$path = $sourceDir + "\" + $_.Name.substring(0, 3)
$_
if(-not (Test-Path $path))
{
mkdir $path
}
move $_.fullname $path
}
}
使用-filter开关时,我仍然遇到问题。这是问题的部分解决方案
答案 0 :(得分:2)
下面的代码缩短了for循环,并显示了在文件名上使用子字符串的示例。您从Get-ChildItem(gci)调用中获取FileInfo对象,因此您需要使用它的属性Name来执行子字符串。有关FileInfo的更多信息,请参阅MSDN。
$sourceDir = read-host Please enter source Dir
$format = read-host Format to look for with .
gci -Path $sourceDir -filter $format | % {
If( -not $_.PSIsContainer)
{
$path = $sourceDir + "\" + $_.Name.substring(0, 3)
if(-not (Test-Path $path))
{
mkdir $path
}
move $_ $path
}
}
答案 1 :(得分:1)
如果文件名始终带有此前缀“W100”,您可以通过这种方式轻松获取子字符串:
$a = "w100_12.ps1"
$a.Substring(0,4) # give W100
如果前缀不是修复,请提供更多样本以帮助您解决问题。
答案 2 :(得分:1)
当管道使用内置变量$ _来引用管道对象时,'%'符号是'for each'的别名:
get-childitem -Path $sourceDir -Filter $format -Recurse | % {If ($_.extension -eq ".ps1"){Write-Host $_.fullname}}
上面的答案引用子字符串,这是解释Powershell子字符串用法的MS Technet页面: