Powershell : Найдите подкаталог и скопируйте файл в этот каталог

#powershell #powershell-3.0 #powershell-4.0

Вопрос:

Я работал над сценарием Powershell последние 2 недели и не добился в этом большого прогресса.

Поэтому я пытаюсь скопировать файл с именем version.properties из корневого каталога моего проекта gradle в такие подкаталоги, как «src/main/ресурсы», «src/main/веб-приложение» и «src/main/приложение». Если я жестко закодирую путь, он работает, но я пытаюсь сделать его универсальным, найдя каталог и скопировав мой файл в этот каталог.

Я хочу, чтобы мой файл version.properties был скопирован в каталог «ресурсы»,»веб-приложение» и «приложение» после запуска сценария powershell.

Как я могу это сделать? Любые предложения приветствуются.

 $SourceDirectory = "Projectrootversion.properties" $folders = gci $SourceDirectory -Recurse -Directory $jar = "src/main/resources" $ear = "src/main/application" $war = "src/main/webapp"   foreach ($folder in Sfolders) {  if (Test-Path $folder/$jar) {  write-host "copying to $folder/$jar"  Copy-Item-Path "{$SourceDirectory}version.properties" -Destination $folder/$jar -Recurse -Force  }    elseif (Test-Path $folder/$ear) {  write-host "copying to $folder/$ear"  Copy-Item-Path "{$SourceDirectory}version.properties" -Destination $folder/$ear -Recurse -Force  }    elseif (Test-Path $folder/$war) {  write-host "copying to $folder/$war"  Copy-Item-Path "{$SourceDirectory}version.properties" -Destination $folder/$war -Recurse -Force  }    else {  Write-Host "No such path"  } }  

Комментарии:

1. Ну и что у вас есть на данный момент? Это просто случай запуска gci , чтобы найти этот файл, и три команды копирования после этого?

2. Да, абсолютно верно. У меня есть gci, и после этого я запускаю цикл for для поиска этих папок, и если я нахожу эту папку, я пытаюсь скопировать этот файл в нужную папку.

3. Так в чем же проблема? Как выглядит ваш код? Поскольку у вас есть определенные папки, в которые вы хотите скопировать его, просто используя относительную часть в корне вашего поиска, или построение абсолютных путей из вашего корня должно работать?

4. Вот как выглядит мой код. Я добавил это в свой вопрос.

5. что-то не так с вашими $Jar $Ear линиями , $War , и. они выглядят так, как будто вы собираетесь определить $Var … но у тебя нет никакого задания.

Ответ №1:

Предполагая, что это структура пути проекта:

 #ProjectRoot #ProjectRootversion.properties lt;--- File #ProjectRootsrc #ProjectRootsrcmain  #ProjectRootsrcmainapplication #ProjectRootsrcmainresources #ProjectRootsrcmainwebapp  

Следующий сценарий сделает то, что вы ищете.

  $SourceDirectory = "C:tempProjectroot" $DestinationDirectories = 'resources','application','webapp'  foreach ($I in $DestinationDirectories) {  $CurrentDest = "$SourceDirectorysrcmain$I"  if (Test-Path -Path $CurrentDest) {  Copy-Item -Path "$SourceDirectoryversion.properties" -Destination $CurrentDest  } else {  Write-Warning "Path not found: $CurrentDest"  } }  

Если я не понял структуру пути, пожалуйста, уточните, что это такое. Я также предполагаю, что «main» здесь является статическим ключевым словом, но если это не так, этот сценарий, возможно, потребуется скорректировать, чтобы отразить это.

Комментарии:

1. Это помогает. Спасибо