Я работал над сценарием PowerShell большую часть недели или двух.Мне удалось заставить некоторые его части работать, но я не могу полностью автоматизировать их.
Я ежедневно работаю с большим количеством файлов CSV, мне было поручено загрузить их вОднако наше программное обеспечение иногда слишком велико для обработки, поэтому я разбиваю их по типу (это столбец в CSV) и экспортирую его в один CSV для каждого «типа».Я смог сделать это с помощью следующего:
$file = gci -Filter "*.csv";
Import-Csv $file `
| Group-Object –Property “type” `
| Foreach-Object `
{
$path=$_.name+”.csv” ; $_.group `
| Export-Csv –Path $path –NoTypeInformation
}
Так что это прекрасно работает для каждого отдельного CSV.К сожалению, у меня нет времени, чтобы сделать это для каждого отдельного CSV.Теперь я перехожу к другому сценарию PowerShell:
get-childitem -Filter "*.csv" `
| select-object basename `
| foreach-object{ $path=$_.basename+".csv" #iterate through files.
if(!(Test-Path -path $_.basename)) #If the folder of the file can't be found then it will attempt to create it.
{
New-Item $_.basename -type directory; $file=$_.basename+".csv";
Import-Csv $file `
| Group-Object -Property "Type" `
| Foreach-Object {
$path=$_.name+".csv"; $_.group `
| `
if(!(Test-Path -path $path2))
{
New-Item $path2 -type directory
Export-Csv -Path $path2 + "\" + $path -NoTypeInformation
}
else
{
"Failed on: " + $_.basename
#Export-Csv -Path $_.basename + "\" + $path -NoTypeInformation
}
}
}
else
{
Import-Csv $path `
| Group-Object -Property "Type" `
| Foreach-Object {$path=$_.basename+".csv" ; $_.group
if(Test-Path -path $._)
{
New-Item $path2 -type directory
Export-Csv -Path $path2 + "\" + $path -NoTypeInformation
}
#else
#{
Write-Host "Failed on: $_.basename"
#Export-Csv -Path $_.basename + "\" + $path -NoTypeInformation
#}
}
}
}
Я просто не могу понять, почему это не работает эффективно.У меня есть два условия.Есть ли папка для CSV?Если нет, создайте его.У меня должен быть другой, потому что один из «типов» содержит \ какие ошибки, если у меня нет папки, поэтому я автоматически пытаюсь создать ее.Когда я запускаю скрипт, я получаю нулевой путь.
Ошибка:
Термин '' не распознается как имя командлета, функции, файла скрипта,или работоспособная программа.Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку.В C: \ Users \ c.burkinshaw \ foldermake.ps1: 11 char: 26 + |`<<<< + CategoryInfo: ObjectNotFound: (: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException </p>
Test-Path : Cannot bind argument to parameter 'Path' because it is null.
At C:\Users\c.burkinshaw\foldermake.ps1:12 char:45
+ if(!(Test-Path -path <<<< $path2))
+ CategoryInfo : InvalidData: (:) [Test-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand
Любая помощь будет принята с благодарностью, если у вас есть вопросы, пожалуйста, не стесняйтесьспросить.