Indexへ
(7904)//【7907】→(7911)
------------------------
【タイトル】画像のパスを一発で変更(絶対→相対)したい
【記事番号】 7907 (*)
【 日時 】06/09/15 21:52
【 発言者 】BB 1@ybb.ne.jp

画像を貼付た図面が数十枚あります。よそからCDでもらったデータですが、データ保存ドライブの容量の関係で、もともと相対パスだったのを、画像データだけ別ドライブに写し、絶対パスに書き換えました。

しかしこのデータを社外に持ち出す予定が出来たので、相対パスに書き換えたいのですが、この作業を一発で出来るソフト、外変等はないでしょうか?


Indexへ
(7907)←【7911】→(7912)
------------------------
【タイトル】こんなんどうでしょう.vbs
【記事番号】 7911 (7907)
【 日時 】06/09/16 19:59
【 発言者 】ねむい人

▼BBさん:
>
>画像データだけ別ドライブに写し、絶対パスに書き換えました。
>
現時点で画像データと図面(JWWファイル)は同じドライブにありますか?
(別ドライブのままだと相対パス化できない)

あると言う前提で話を進めますが、
もし WSH を使えるなら、こんなんどうでしょう。

《hoge.bat》
rem #jww
rem #cd
rem #hf
rem #g1
rem #h3
rem #hc画像貼り付け文字列の選択
rem #e
copy jwc_temp.txt tmp.txt
cscript hoge.vbs //Nologo

全レイヤ読み取りがまずいなら4行目を "rem #g0" に。
範囲選択が面倒なら5行目を "rem #h4" として6行目削除。


《hoge.vbs》
Set FSO = CreateObject("Scripting.FileSystemObject")
Set RO = New RegExp
RO.IgnoreCase = True
Set Input = FSO.OpenTextFile("tmp.txt")
Set Output = FSO.CreateTextFile("jwc_temp.txt",True)
Input.ReadLine
Output.WriteLine "hd"
While Input.AtEndOfStream <> TRUE
    Buf = Input.ReadLine
    If InStr(Buf,"^@BM") <> 0 Then
        TopOfLine = Left(Buf,InStr(Buf,"^@BM")+3)
        Buf = Mid(Buf,Len(TopOfLine)+1)
        EndOfLine = Mid(Buf,InStr(Buf,","))
        RO.Pattern = ",[^,]+,[^,]+$"
        Set Matches = RO.Execute(Buf)
        For Each Match in Matches
            EndOfLine = Match.Value
        Next
        If FSO.GetDriveName(Buf) = FSO.GetDriveName(JwwDirPath) Then
            RO.Pattern = ",[^,]+,[^,]+$"
            ImgFilePath = RO.Replace(Buf,"")
            ImgDirPath = FSO.GetParentFolderName(ImgFilePath)
            Buf = TopOfLine & RelativePath(JwwDirPath,ImgDirPath) & FSO.GetFileName(ImgFilePath) & EndOfLine
        Else
            Buf = TopOfLine & Buf
        End If
    ElseIf InStr(Buf,"file=") = 1 Then
        JwwFilePath = Mid(Buf,InStr(Buf,"=")+1)
        JwwDirPath = Left(JwwFilePath,InStrRev(JwwFilePath,"\"))
    End If
    Output.WriteLine Buf
Wend
Input.Close
Output.Close

Function RelativePath(BasePath,SubPath)
    BasePathArray = Split(BasePath,"\",-1,vbTextCompare)
    SubPathArray = Split(SubPath,"\",-1,vbTextCompare)
    If UBound(BasePathArray) < UBound(SubPathArray) Then
        iCount = UBound(BasePathArray)
    Else
        iCount = UBound(SubPathArray)
    End If
    RelativePath = ""
    For i = 0 To iCount
        If BasePathArray(i) <> SubPathArray(i) Then
            For j = UBound(BasePathArray) to i+1 Step -1
                RelativePath = RelativePath & "..\"
            Next
            Exit For
        Else
            SubPathArray(i) = ""
        End If
    Next
    For i = 0 To UBound(SubPathArray)
        If SubPathArray(i) <> "" Then
            RelativePath = RelativePath & SubPathArray(i) & "\"
        End If
    Next
End Function


急造なので自信ナッシング。
相対パスの画像が混ざっていたらアウト、エラーも野放し。^_^;
利用は自己責任で。

蛇足ながら "hoge.vbs" が水色の巻物っぽいアイコンになっていたら WSH 使えるはず。


Indexへ
(7911)←【7912】//(7909)
------------------------
【タイトル】Re(1):画像のパスを一発で変更(絶対→相対)したい
【記事番号】 7912 (7907)
【 日時 】06/09/16 22:42
【 発言者 】スター

▼BBさん:
>画像を貼付た図面が数十枚あります。よそからCDでもらったデータですが、データ保存ドライブの容量の関係で、もともと相対パスだったのを、画像データだけ別ドライブに写し、絶対パスに書き換えました。
>
>しかしこのデータを社外に持ち出す予定が出来たので、相対パスに書き換えたいのですが、この作業を一発で出来るソフト、外変等はないでしょうか?

返信をためらうのは、図面が数十枚の部分です。
一枚に写真が1,2枚ならば答えはありません。

一枚の図面に数十枚の写真が貼ってあるならば以下の方法では

文字、範囲選択のあと右上の外部エディター(初期値はnotepadかな)を起動し、置換コマンドで行います。

元の文字を ^@BMD:\JWC\DATA\TEST.jpg,100,108.434
として(TESTが様々に変わる)

元文字  BMD:\JWC\DATA\
置換文字
で実行すると相対になります。

これを保存し終了するとJWWの文字が変更されます。