サイトアイコン わんすけに聞いてみる

Teraterm Macroで親階層のフォルダパスを取得する

ぜんぜん開発の進捗から話変わりますが。

人からttlマクロで親階層のフォルダパス取得できない?って聞かれたので書いてみました。

確かに、ttlマクロには簡素な機能しかないから実装しようとするとすこし考えるなーって思った。

と、まぁ前置きはさておき。

こんな感じにしときゃ指定パスの親フォルダパスを取得できます。

サブルーチンの定義部分
goto SKIP_GETPARENTFOLDER
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
;■ call GetParentFodler
;■      BasePathにパスを指定してサブルーチンをcallすると
;■      ParentFolderPathに1階層上のフォルダまでのパスが入る。
;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
:GetParentFodler

ParentFolderPath=""

:Retry_GetFolders

strsplit BasePath "\" 9

if result=9 then
  sprintf2 ParentFolderPath '%s\%s\%s\%s\%s' ParentFolderPath groupmatchstr1 groupmatchstr2 groupmatchstr3 groupmatchstr4
  sprintf2 ParentFolderPath '%s\%s\%s\%s\%s' ParentFolderPath groupmatchstr5 groupmatchstr6 groupmatchstr7 groupmatchstr8
  BasePath=groupmatchstr9
  goto Retry_GetFolders
else
  FldrCnt=result
  if FldrCnt>1 sprintf2 ParentFolderPath '%s\%s' ParentFolderPath groupmatchstr1
  if FldrCnt>2 sprintf2 ParentFolderPath '%s\%s' ParentFolderPath groupmatchstr2
  if FldrCnt>3 sprintf2 ParentFolderPath '%s\%s' ParentFolderPath groupmatchstr3
  if FldrCnt>4 sprintf2 ParentFolderPath '%s\%s' ParentFolderPath groupmatchstr4
  if FldrCnt>5 sprintf2 ParentFolderPath '%s\%s' ParentFolderPath groupmatchstr5
  if FldrCnt>6 sprintf2 ParentFolderPath '%s\%s' ParentFolderPath groupmatchstr6
  if FldrCnt>7 sprintf2 ParentFolderPath '%s\%s' ParentFolderPath groupmatchstr7
  if FldrCnt>8 sprintf2 ParentFolderPath '%s\%s' ParentFolderPath groupmatchstr8
endif

strtrim ParentFolderPath "\"
return
:SKIP_GETPARENTFOLDER

フォルダ区切り文字で分割して再構築しつつ分割数の一つ手前までを再結合して取って来てます。

 

これをマクロのどっかに張り付けといて、呼び出すときはこんな感じで。

ParentFolderPathをBasePathに突っ込んでもっかい走らせればどんどん上階層いけるよって話。

BasePath="C:\temp\test\sample.txt"
call GetParentFodler
; ParentFolderPath ⇒ C:\temp\test

BasePath=ParentFolderPath
call GetParentFodler
; ParentFolderPath ⇒ C:\temp

こーゆーのも需要があるなら予め良く使う多言語の機能の類似処理作っておくのもありかもねーって思った。というお話でした。

モバイルバージョンを終了