Windows Power Shell переименовывает файлы - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в написании сценариев, и вот моя задача:

Папка с X-файлами.Каждый файл содержит несколько документов Word, листов Excel и т. Д. В этих файлах есть имя клиента, и мне нужно назначить идентификационный номер.

Это изменение повлияет на все файлы в этой папке, которые содержат этот клиент.имя.

Как это сделать с помощью Windows Power Shell?

$configFiles = Get-ChildItem . *.config -rec
 foreach ($file in $configFiles)
{
(Get-Content $file.PSPath) |
Foreach-Object { $_ -replace " JOHN ", "123" } |
Set-Content $file.PSPath
}   

Это правильный подход?

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Что если я попытаюсь запустить на C #? Чего-то еще не хватает?

 }
string rootfolder = @"C:\Temp";
   string[] files = Directory.GetFiles(rootfolder, "*.*",SearchOption.AllDirectories);
   foreach (string file in files)
   {    try
     {    string contents = File.ReadAllText(file);
       contents = contents.Replace(@"Text to find", @"Replacement text");
       // Make files writable
   File.SetAttributes(file, FileAttributes.Normal);

   File.WriteAllText(file, contents);
 }
 catch (Exception ex)
 {    Console.WriteLine(ex.Message);
     }
   }
0 голосов
/ 21 ноября 2018

Для Word Document: это то, что я использую.Просто не могу понять, как этот скрипт может также изменить верхний и нижний колонтитулы в документе Word

$objWord = New-Object -comobject Word.Application  
$objWord.Visible = $false

$list = Get-ChildItem "C:\Users\*.*" -Include *.doc*  
foreach($item in $list){
$objDoc = $objWord.Documents.Open($item.FullName,$true)

$objSelection = $objWord.Selection 
$wdFindContinue = 1
$FindText = " BLAH " 
$MatchCase = $False 
$MatchWholeWord = $true
$MatchWildcards = $False 
$MatchSoundsLike = $False 
$MatchAllWordForms = $False 
$Forward = $True 
$Wrap = $wdFindContinue 
$Format = $False 
$wdReplaceNone = 0 
$ReplaceWith = "help " 
$wdFindContinue = 1 
$ReplaceAll = 2

$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
$Wrap,$Format,$ReplaceWith,$ReplaceAll) 
$objDoc.Save()
$objDoc.Close()
}
$objWord.Quit()
0 голосов
/ 20 ноября 2018

Как указывал @lee_Daily, для поиска и замены в разных типах файлов вам потребуется другой код.Вот пример того, как вы могли бы сделать это:

$objWord = New-Object -comobject Word.Application  
$objWord.Visible = $false

foreach ( $file in (Get-ChildItem . -r ) ) {
    Switch ( $file.Extension ) {
        ".config" {
            (Get-Content $file.FullName) |
                Foreach-Object { $_ -replace " JOHN ", "123" } |
                    Set-Content $file.FullName
        }
        {('.doc') -or ('.docx')} {
            ### Replace in word document using $file.fullname as the target
        }
        {'.xlsx'} {
            ### Replace in spreadsheet using $file.fullname as the target
        }
    }
}

Для фактического кода, чтобы выполнить поиск и замену, я бы предложил com-объекты для обоих.

Пример поиска и замены слова https://codereview.stackexchange.com/questions/174455/powershell-script-to-find-and-replace-in-word-document-including-header-footer

Пример поиска и замены Excel Поиск и замена в Excel без зацикливания?

Я бы посоветовал изучить модуль ImportExcel, это отличный инструмент, которым я часто пользуюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...