Оригинальный код Powershell содержит ошибку. Условия цепочки с -and
примерно так,
(![System.IO.Directory]::Exists("$FE_WKFD\AUTO")) -and
(![System.IO.Directory]::Exists("$FE_WKFD\AUTO\POB")) -and
будет означать, что создавать все каталоги, только если все каталоги отсутствуют. В пакете каждый каталог тестируется и создается отдельно.
Идиоматический подход Powershell - хранить каталоги в коллекции, повторять ее и создавать то, чего не хватает. Крайний случай тестирования файла вместо dir не включается в ту же конструкцию, но имеет собственный оператор if
.
Дальнейшее улучшение читабельности заключается в использовании простых условий. Вместо if something and something and so and so
сначала проверьте, установлен ли $Log
, а затем начните тестирование для каталогов. Вот так
if($Log) {
# A list of subdirectories
$autoDirs = @("AUTO", "AUTO\POB", "AUTO\file")
# Iterate subdir list using foreach % operator
$autoDirs | % {
# See if subdir exists. $_ is picked from $autoDirs
if(-not test-path $_) {
# ... and create if doesn't
new-item -itemtype directory -path $(join-path $WKFD_Path $_)
}
}
# Create file if it doesn't exist
if(-not test-path "$WKFD_Path\AUTO\Auto.txt") {
new-item -itemtype file -path "$WKFD_Path\AUTO\Auto.txt" -value "Auto text"
}
B_F
} else {
Stop_F
}