Как отметил @FelixKling, наиболее вероятным сценарием является то, что узлы, которые вы ищете, еще не существуют.
Однако современные методы разработки часто могут манипулировать элементами документа за пределами дерева документов либо с DocumentFragments, либо просто отсоединением / повторным подключением текущих элементов напрямую. Такие методы могут использоваться как часть шаблонов JavaScript или для предотвращения чрезмерных операций перерисовки / переплавки, в то время как элементы, о которых идет речь, сильно изменяются.
Аналогично, новая функциональность «Теневой DOM» развертывается в современных браузерах позволяет элементам быть частью документа, но не обрабатываться запросом document.getElementById и всеми его методами sibling (querySelector и т. д.). Это делается для инкапсуляции функциональных возможностей и, в частности, скрыть его.
Опять же, скорее всего, элемент, который вы ищете, просто (пока) в документе, и вы должны сделать, как предлагает Феликс , Тем не менее, вы также должны знать, что это все чаще является не единственной причиной того, что элемент может быть необоснованным (временно или постоянно).
Самое простое решение - объединить расщепление строк с помощью оператора -split
и блока сценариев с задержкой (который вы пытались использовать):
Get-ChildItem C:\Script –Recurse –File -Exclude [0-9][0-9]-[0-9]* |
Rename-Item -NewName {
# Split the full path into its components.
$names = Самое простое решение - объединить расщепление строк с помощью оператора -split
и блока сценариев с задержкой (который вы пытались использовать):
[110] -WhatIf
предварительно просматривают операцию переименования; удалите его для фактического переименования.
Обратите внимание, как -Exclude
используется с выражением подстановочного знака непосредственно с Get-ChildItem
для исключения файлов, которые уже имеют целевой формат имени. Sup>
Основная причина, по которой ваш оригинал не работал, состоит в том, что вы вычислили одиночные, статические , $parent
и $grandparent
значения вместо получения значений, характерных для входного пути, из каждого входного пути.
Кроме того, ваш $grandparent
расчет был излишне сложным; Полезный ответ Герта Яна Краайевельда показывает более простой способ.
.FullName -split '\\'
# Compose the new file name from the relevant components and output it.
'{0}-{1} {2}' -f $names[-3], $names[-2].Substring($names[-2].Length-4), Самое простое решение - объединить расщепление строк с помощью оператора -split
и блока сценариев с задержкой (который вы пытались использовать):
[110] -WhatIf
предварительно просматривают операцию переименования; удалите его для фактического переименования.
Обратите внимание, как -Exclude
используется с выражением подстановочного знака непосредственно с Get-ChildItem
для исключения файлов, которые уже имеют целевой формат имени. Sup>
Основная причина, по которой ваш оригинал не работал, состоит в том, что вы вычислили одиночные, статические , $parent
и $grandparent
значения вместо получения значений, характерных для входного пути, из каждого входного пути.
Кроме того, ваш $grandparent
расчет был излишне сложным; Полезный ответ Герта Яна Краайевельда показывает более простой способ.
.Name
} -WhatIf
-WhatIf
предварительно просматривают операцию переименования; удалите его для фактического переименования.
Обратите внимание, как -Exclude
используется с выражением подстановочного знака непосредственно с Get-ChildItem
для исключения файлов, которые уже имеют целевой формат имени. Sup>
Основная причина, по которой ваш оригинал не работал, состоит в том, что вы вычислили одиночные, статические , $parent
и $grandparent
значения вместо получения значений, характерных для входного пути, из каждого входного пути.
Кроме того, ваш $grandparent
расчет был излишне сложным; Полезный ответ Герта Яна Краайевельда показывает более простой способ.
Чтобы получить прародителя объекта $ file:
$file.Directory.Parent
Родительский каталог файла является членом «Directory» объекта файла.
Родительский каталог каталога является «родительским» элементом объекта каталога.
Это не сложно, но запутать это наверняка ...
Редактировать
Вы спрашивали мое решение:
Get-ChildItem C:\script -Recurse -File | ForEach-Object {
$parent = Чтобы получить прародителя объекта $ file:
[110] Родительский каталог файла является членом «Directory» объекта файла.
Родительский каталог каталога является «родительским» элементом объекта каталога.
Это не сложно, но запутать это наверняка ...
Редактировать
Вы спрашивали мое решение:
[111] Я использовал параметр -file в Get-ChildItem, чтобы получать только файлы из структура папок. Я не уверен, что подходит в вашей ситуации
.Directory.Name
$grandparent = Чтобы получить прародителя объекта $ file:
[110] Родительский каталог файла является членом «Directory» объекта файла.
Родительский каталог каталога является «родительским» элементом объекта каталога.
Это не сложно, но запутать это наверняка ...
Редактировать
Вы спрашивали мое решение:
[111] Я использовал параметр -file в Get-ChildItem, чтобы получать только файлы из структура папок. Я не уверен, что подходит в вашей ситуации
.Directory.Parent.Name
Rename-Item Чтобы получить прародителя объекта $ file:
[110] Родительский каталог файла является членом «Directory» объекта файла.
Родительский каталог каталога является «родительским» элементом объекта каталога.
Это не сложно, но запутать это наверняка ...
Редактировать
Вы спрашивали мое решение:
[111] Я использовал параметр -file в Get-ChildItem, чтобы получать только файлы из структура папок. Я не уверен, что подходит в вашей ситуации
.FullName -NewName "$grandparent-$($parent.Substring($parent.length-4,4)) $( Чтобы получить прародителя объекта $ file:
[110] Родительский каталог файла является членом «Directory» объекта файла.
Родительский каталог каталога является «родительским» элементом объекта каталога.
Это не сложно, но запутать это наверняка ...
Редактировать
Вы спрашивали мое решение:
[111] Я использовал параметр -file в Get-ChildItem, чтобы получать только файлы из структура папок. Я не уверен, что подходит в вашей ситуации
.name)"
}
Я использовал параметр -file в Get-ChildItem, чтобы получать только файлы из структура папок. Я не уверен, что подходит в вашей ситуации