Question Supprimer caratère Hexa

Plus d'informations
il y a 16 ans 11 mois #4431 par physyo
Réponse de physyo sur le sujet Re:Supprimer caratère Hexa
Bah j'ai essayer de le faire mais je trouve pas ...

J'ai bien vu que sur un de tes postes tu met soit

[code:1](Get-Content \"$CurrentFile\"«») -as [String[]] | Remove-LastString $StringToMatch | Out-File \"$TempFile\" -Encoding oem [/code:1]

ou

[code:1](Get-Content \"$_.Fullname\"«») -as [String[]] | Remove-LastString $StringToMatch | Out-File \"$TempFile\" -Encoding oem [/code:1]

Enfaite je comprends pas comment tu récupère la valeur du nom pour la remettre dans le nouveau fichier $tempfile

En même temps je débute donc j'ai du mal à comprendre le principe de certaine commande.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 11 mois #4434 par Laurent Dardenne
physyo écrit:

Bah j'ai essayer de le faire mais je trouve pas ...

Je vois bien.

L'affectation de la ligne suivante ( 1 seul fichier, 1 itération du traitement)
[code:1]$CurrentFile=\"g:\temp\fichier.txt\"[/code:1]
devient ( n fichiers, n itérations du traitement)
[code:1]
Dir *.txt|Foreach {
[/code:1]
Dans le segment de pipeline on remplace les occurences de $CurrentFile par $_.FullName, et la variable $CurrentFile n'a plus lieu d'être.
[code:1]
Dir *.txt|Foreach {
$TempFile = [IO.Path]::GetTempFileName()
#On cast le résultat de Get-Content pour obtenir un tableau de string au lieu d'un tableau d'objet
(Get-Content \"$_.FullName\"«») -as [String[]]| Remove-LastString $StringToMatch | Out-File \"$TempFile\" -Encoding oem
# Attention
Move-Item -Path \"$TempFile\" -Destination \"$_.FullName\"
}
[/code:1]
physyo écrit:

En faite je comprends pas comment tu récupère la valeur du nom pour la remettre dans le nouveau fichier $tempfile

$Tempfile est utilisé pour récupérer le résultat de la transformation, mais on ne récupére pas son nom. Ce n'est pas une affectation du type : $tempfile.name=\"NomFichierOrigine\"
C'est une opération de renommage, on aurait pu utiliser le cmdlet Rename-Item, mais dans ce cas, puisque le fichier est dans un répertoire temporaire, il aurait fallu en plus le copier dans le bon répertoire.
Le cmdlet Move-item permet cette opération en une seule passe, je copie un fichier en lui donnant un nouveau nom et je supprime l'ancien.
On déplace le fichier, en utilisant le verbe \"déplace\" dans la description de ton traitement tu trouves tout de suite la correspondance du cmdlet à utiliser. C'est pour ça que je dis qu'il faut écrire la requête avant de coder.
physyo écrit:

En même temps je débute donc j'ai du mal à comprendre le principe de certaine commande.

Il n'y a pas de soucis, moi aussi j'ai eu du mal dans les premiers temps. Chaque cmdlet n'a pas un principe spécifique mais seulement un traitement.
Les principes sont ceux de PowerShell. Sinon cela voudrait dire que pour chaque nouveau cmdlet on ajoute des principes, des concepts, qu'il faudrait apprendre. Mais ce n'est pas ça.
PowerShell à de nombreux principes dont quelques un plus important que d'autres, mais ensuite c'est tjr pareil. Pour les cmdlets qui seront créés dans 6 mois on aura \"juste\" à lire leurs documentation, à connaitre les paramètres qu'ils proposeront ainsi que les objets qu'ils manipulent.
Là est la puissance de ce shell, on précise ce qu'on doit récupérer pas comment on le récupère (sauf cas particulier)

Il faut un peu de patience, c'est la pratique qui fait qu'on assimile ces principes. Je reconnais que c'est parfois frustrant :dry:<br><br>Message édité par: Laurent Dardenne, à: 23/03/09 14:27

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 11 mois #4441 par physyo
Réponse de physyo sur le sujet Re:Supprimer caratère Hexa
Je comprend un peu mieux chaque jour ce forum est très instructif chaque jours.

J'ai essayé ça
[code:1]function Remove-LastString([String]$Match){
$ArrayOfString=@($input)
$LastItem=$ArrayOfString.Count-1
if ($ArrayOfString[$LastItem] -match \&quot;^\$($match)$\&quot;«»)
{ $ArrayOfString[0..($LastItem-1)] }
else
{ $ArrayOfString }
}
$StringToMatch=[string][char]0x1C
$Path= \&quot;C:\FAC_GED\&quot;
foreach ($CurrentFile in dir \&quot;$Path\FA*.txt\&quot;«»)
{

$TempFile = [IO.Path]::GetTempFileName()
(Get-Content \&quot;$_.FullName\&quot;«») -as [String[]] | Remove-LastString $StringToMatch | Out-File \&quot;$TempFile\&quot; -Encoding oem
type $TempFile
Move-Item -Path \&quot;$TempFile\&quot; -Destination \&quot;$_.FullName\&quot;
}[/code:1]

Mais enfaite la dernier ligne ne marche pas car le fichier source et toujours présent dans le répertoire.
Je voudrai plus faire ça
[code:1]Move-Item -Path \&quot;$TempFile\&quot; -Destination \&quot;c:\fac_ged\ok\$_.FullName\&quot; [/code:1]

C'est possible tu pense ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 11 mois #4445 par Laurent Dardenne
physyo écrit:

Mais enfaite la dernier ligne ne marche pas car le fichier source et toujours présent dans le répertoire.

Oui je te l'ai signalé
Laurent Dardenne écrit:

La dernière instruction nécessite qq contrôle préliminaire si on recopie le fichier dans le même répertoire. Je te laisse faire.

physyo écrit:

C'est possible tu pense ?

Essaie ;)

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 11 mois #4455 par physyo
Réponse de physyo sur le sujet Re:Supprimer caratère Hexa
Hello

Je viens de faire ça

[code:1]function Remove-LastString([String]$Match){
$ArrayOfString=@($input)
$LastItem=$ArrayOfString.Count-1
if ($ArrayOfString[$LastItem] -match \&quot;^\$($match)$\&quot;«»)
{ $ArrayOfString[0..($LastItem-1)] }
else
{ $ArrayOfString }
}
$StringToMatch=[string][char]0x1C
$Path= \&quot;C:\FAC_GED\&quot;
foreach ($CurrentFile in dir \&quot;$Path\*.txt\&quot;«»)
{

$TempFile = [IO.Path]::GetTempFileName()
(Get-Content \&quot;$CurrentFile\&quot;«») -as [String[]] | Remove-LastString $StringToMatch | Out-File \&quot;$TempFile\&quot; -Encoding oem
type $TempFile
Move-Item -Path \&quot;$TempFile\&quot; -Destination \&quot;c:\fac_ged\ok\$_.FullName\&quot;
}[/code:1]
Mais ça ne marche pas il me crée un fichier \&quot;.fullname\&quot;

Quand pense tu ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 11 mois #4456 par Laurent Dardenne
physyo écrit:

Quand pense tu ?

Que tu touches au but :)
[code:1]
Move-Item -Path \&quot;$TempFile\&quot; -Destination \&quot;c:\fac_ged\ok\$_.FullName\&quot;
[/code:1]
Ici tu construis une chaîne de caractères, dans ce cas pour obtenir le contenu de la propriété on doit créer 'un groupe' à l'aide de parenthèses préfixées du signe dollar indiquant une chaîne de caractères, ce qui déclenche à son tour la substitution :
[code:1]
Move-Item -Path \&quot;$TempFile\&quot; -Destination \&quot;c:\fac_ged\ok\$($_.FullName)\&quot;
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.073 secondes
Propulsé par Kunena