Я создаю сценарий перемещения PowerShell, который будет динамически создавать каталоги на основе имени файла, а затем перемещать файлы в соответствии с их именем. Все аспекты этого сценария работают, за исключением пути к каталогу по умолчанию. Любая идея, как я могу автоматически изменить его на каталог местоположения сценария. Я пытался:
cd $PSScriptroot
без везения
Вот мой вспомогательный файл для создания файлов. В нашей реальной среде файлы уже были бы сгенерированы:cd $PSScriptroot
New-Item -Path ($PSScriptroot + '\59_' + '20180101' + '.txt') -ItemType file
New-Item -Path ($PSScriptroot + '\59_' + '20180102' + '.txt') -ItemType file
New-Item -Path ($PSScriptroot + '\59_' + '20180103' + '.txt') -ItemType file
New-Item -Path ($PSScriptroot + '\59_' + '20180104' + '.txt') -ItemType file
...
New-Item -Path ($PSScriptroot + '\59_' + '20181231' + '.txt') -ItemType file
Вот сценарий:
`cd $PSScriptroot
$FileNameArray = Get-ChildItem -Filter "*.txt"
$FileNameArray = $FileNameArray -replace "....$"
$FileNameArray = $FileNameArray.Substring(3)
Foreach ($f in $FileNameArray)
{
#Year
$Year = $f -replace "....$"
$FilePathY = "$PSScriptroot\$Year"
if (Test-Path $FilePathYM ){
}
else {New-Item -ItemType Directory -Path ($FilePathY)}
#Month
$Month = $f.Substring(4) -replace "..$"
$FilePathYM = "$PSScriptroot\$Year\$Month"
if (Test-Path $FilePathYM ){
}
else {New-Item -ItemType Directory -Path ($FilePathYM)}
#Days
$Day = $f.Substring(6)
$FilePathYMD = $PSScriptroot +'\'+ $Year +'\'+ $Month +'\'+ $Day
if (Test-Path $FilePathYMD){
}
else {New-Item -ItemType Directory -Path ($FilePathYMD)}
}
Foreach($file in $FileNameArray)
{
$Year = $file -replace "....$"
$Month = $file.Substring(4) -replace "..$"
$Day = $file.Substring(6)`
Move-Item ($PSScriptroot + '\59_' + $file + '.txt' ) ($PSScriptroot + '\' + $Year + '\' + $Month + '\' + $Day)
}`
Путь к файлу установлен в каталог пользователя по умолчанию. Таким образом, файлы обычно перемещаются на диск C: \ или в любое другое место, которое пользователь устанавливает в качестве каталога по умолчанию.
Но файлы перемещаются в правильную папку, как и планировалось, и папки создаются без ошибок.
Что означает «путь к файлу установлен на путь к каталогу пользователя по умолчанию»? Какой пользователь? Какой каталог? Похоже, что в вашем вопросе отсутствует большая часть информации. Извините, что я не могу помочь.
Если вы хотите, чтобы текущее местоположение скрипта в Get-Location
могло быть тем, что вы ищете
см. stackoverflow.com/questions/48511874/…. $ PSScriptroot не всегда доступен.
jrdider Я думаю, вы кое-что нашли с Get-Location. Однако он перейдет в текущий рабочий каталог, не обязательно в каталог сценариев. Как мне использовать Get-Location для вызова местоположения скриптов?
Насколько я понимаю из комментариев, я понимаю, что сценарий работает нормально без ошибок и что вам нужен путь, указывающий на расположение сценария
Any idea how I could automatically change it to the directory of the Script Location. I've tried: cd $PSScriptroot with no luck
Попробуй это: (Протестировано: указывает на каталог, в котором находится скрипт)
$rootPath = split-path -parent $MyInvocation.MyCommand.Definition
echo "Path is: $rootPath"
$PSScriptRoot
представлен в PowerShell версия 3
КОНЧИК: Попробуйте $PSVersionTable.PSVersion
, чтобы узнать версию.
Что означает «все аспекты этого скрипта работают, кроме пути к каталогу по умолчанию»? Что происходит? (Помните: никто не видит ваш экран!)