J'utilise le script PowerShell suivant pour supprimer les guillemets dans un fichier .CSV:

(gc C:\TestQualifier*.csv) | % {$_ -replace '"', ""} | out-file C:\TestQualifier.csv -Fo -En ascii

Le fichier sera toujours nommé TestQualifier mais peut avoir une date et une heure horodatées à la fin du nom de fichier (par exemple, TestQualifier10082017091010). Le caractère générique gère cela à la source, mais je ne peux pas comprendre comment écrire le nom de fichier source dans le nom de fichier de sortie. Out-File n'accepte pas les caractères génériques.

Idéalement, je voudrais également écraser le fichier existant lors de la sortie du fichier.

Toute aide est la bienvenue.

1
soziblewuup 10 août 2017 à 14:49

2 réponses

Meilleure réponse

Vous devez résoudre le chemin et, idéalement, l'enregistrer dans une variable pour l'utiliser dans le tuyau.

$path = Resolve-Path C:\TestQualifier*.csv | Select -Expand Path

Resolve-Path à lui seul renvoie des objets System.Management.Automation.PathInfo, nous développons donc la propriété path pour obtenir exactement cela.

Donc, en supposant qu'il n'y a qu'un seul chemin qui correspond à ce filtre, il est maintenant stocké, sous forme de chaîne, dans $path.

(Get-Content $path) | ForEach-Object{$_ -replace '"', ""} | Out-File $path -Force -Encoding ascii

S'il s'agit d'un code unique, cela n'a pas d'importance, mais si vous prévoyez de l'utiliser plus tard, il vous sera peut-être plus facile d'éviter d'utiliser des alias et d'utiliser des noms de paramètres complets.
L'utilisation de noms complets de commandes et de paramètres facilite la lecture du code maintenant et plus tard.

1
mklement0 10 août 2017 à 20:50

Si plus d'un fichier doit être traité avec le caractère générique:

ForEach ($File in (gci C:\TestQualifier*.csv)){(gc $File)|%{$_ -replace '"'}|out-file $File -Fo -En ascii}

Verbeuse

ForEach ($File in (Get-ChildItem C:\TestQualifier*.csv)){
    (Get-Content $File) | ForEach-Object {
        $_ -replace '"'
    } | Out-File $File -Force -Encoding ascii
}
0
user6811411user6811411 10 août 2017 à 12:53