Donc, c'est un peu vague à décrire, je vais donc utiliser une image:

enter image description here

J'ai environ 150 fichiers DWG qui ont le même contenu que les SVG (ce sont tous les deux des formats de dessin vectoriel convertis de 1 en 1). Je voudrais appliquer le même nom de fichier des DWG aux SVG qui commencent par le même numéro.

Je me retrouve donc avec:

001_TERMINAL.dwg
001_TERMINAL.svg
002_DIFFUSER.dwg
002_DIFFUSER.svg

Etc...

J'utilise un PC avec Windows 10.

Comment puis-je mettre en œuvre une solution à mon problème? Merci!

0
Gerlof Leuhof 23 mai 2018 à 11:59

3 réponses

Meilleure réponse

Parce que vous êtes sous Windows, PowerShell est un excellent candidat pour résoudre ce problème.

Pour le script ci-dessous, la longueur de la partie numérique devant le caractère de soulignement n'a pas d'importance, tant qu'il y a un trait de soulignement dans le nom de fichier .dwg, comme visible dans votre question.

Remplacez simplement «c: \ dossier» ci-dessous par le chemin dans lequel vos fichiers sont stockés.

$folderPath = "c:\folder" 

$files = Get-ChildItem ([System.IO.Path]::Combine($folderPath, "?*_*.dwg"))

for ($i=0; $i -lt $files.Count; $i++) 
{
    $file = $files[$i]    
    $dwgFileName = $file.BaseName
    $index = $dwgFileName.IndexOf("_")    
    $numberPart = $dwgFileName.Substring(0, $index)
    $svgFilePath = [System.IO.Path]::Combine($folderPath, "$numberPart.svg")

    if ([System.IO.File]::Exists($svgFilePath))
    {
        Rename-Item -Path $svgFilePath -NewName "$dwgFileName.svg"
    }
}
0
pfx 29 mai 2018 à 22:42

Utilisation de bash:

#!/bin/bash
for f in *.dwg; do
    IFS='_' read -r -a arr <<< "$f"
    mv ${arr[0]}.svg ${f%.*}.svg
done
0
Pablo 29 mai 2018 à 07:25

En supposant qu'il y ait toujours 3 chiffres dans les noms de fichier * .svg:

set DIR=C:\mydir

@rem Allow repeated setting of !variables! in the FOR loop below
setlocal enabledelayedexpansion

for %%I in (%DIR%\*.dwg) do (
  @rem "~n" to pick out just the filename part of the %%I variable
  set BASENAME=%%~nI

  @rem Substring - batch file style
  set PREFIX=!BASENAME:~0,3!

  echo !PREFIX! ... !BASENAME!
  rename !PREFIX!.svg !BASENAME!.svg
)

Notez que cela devra être dans un fichier de commandes pour que le %%I fonctionne.

La principale complication est l'utilisation de variables dans une boucle FOR multiligne.

Pour ceux-ci, vous devez utiliser l'option d'expansion retardée, pour permettre à la variable d'être étendue à chaque fois, plutôt que lorsque la ligne est analysée. Cela signifie que vous devez utiliser !variable! au lieu du plus normal %variable% dans un fichier batch.

1
df778899 1 juin 2018 à 17:31