2017-07-14 1 views
-1

Je souhaite rechercher dans le texte d'un fichier INI les chemins qui ressemblent à C:\example\example. Quand il trouve un chemin comme celui-ci je veux qu'une boîte de message avec un avertissement soit affiché sur l'écran. Les fichiers INI se trouvent dans un dossier et ses sous-dossiers.Rechercher dans le texte et créer une fenêtre d'avertissement

J'ai essayé mais j'ai échoué.

$PathOfFolderAndSubfolder = C:\example\example\* 
if ((Get-ChildItem -Path $PathOfFolderAndSubfolder -Filder \*/) -eq $true) { 
    [System.Windows.Forms.MessageBox]::Show("error", "error", 0) 
} 
+1

Cela n'a absolument aucun sens. Pourriez-vous reformuler votre question? Où est votre fichier ini dans le code? S'il vous plaît poster les erreurs que vous obtenez. Et vérifiez l'orthographe correcte dans votre code ('-Filder'?). Et joindre la valeur de '$ PathOfFolderAndSubfolder' entre guillemets –

Répondre

2

Get-ChildItem est pour les articles énumérant enfants des conteneurs (par exemple, des fichiers dans des répertoires), et non pour la liste du contenu des fichiers. Utilisez Get-Content pour ce dernier:

$filename = 'C:\path\to\some.ini' 
$pattern = 'C:\example\example' 

if ((Get-Content $filename) -like "*${pattern}*") { 
    [Windows.Forms.MessageBox]::Show("error", "error", 0) 
} 

Si vous voulez vérifier chaque fichier INI dans un dossier particulier (sous) arbre, vous devez récursivité dans le dossier et vérifier chaque fichier correspondant, par exemple comme ceci:

$basedir = 'C:\some\folder' 
$filename = 'C:\path\to\some.ini' 
$pattern = 'C:\example\example' 

$found = Get-ChildItem $basedir -Include '*.ini' -Recurse | 
     Where-Object { (Get-Content $_.FullName) -like "*${pattern}*" } 

if ($found) { 
    [Windows.Forms.MessageBox]::Show("error", "error", 0) 
} 
+0

merci thats travail. Est-il possible que je peux définir la parte du fichier ini avec l'erreur dans la boîte de message? – marten1234

+0

'' ($ trouvé | Select-Object -Expand FullName) -join "' r'n "' ' –