ここから本文です

VBS で、 フルパス D:\A\B\C\D\E\FILE.TXT を 分解して パス P=D:\A\B\C\D\E\ ...

tec********さん

2020/1/1101:08:13

VBS で、 フルパス D:\A\B\C\D\E\FILE.TXT を
分解して
パス P=D:\A\B\C\D\E\

ファイル名 F=FILE.TXT

P と F を得る記述を教えて下さい。

閲覧数:
40
回答数:
2

違反報告

ベストアンサーに選ばれた回答

bch********さん

2020/1/1101:19:14

Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")

Dim P
P = fs.GetParentFolderName("D:\A\B\C\D\E\FILE.TXT") & "\"
WScript.Echo P

Dim F
F = fs.GetFileName("D:\A\B\C\D\E\FILE.TXT")
WScript.Echo F

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

Prometheusさん

2020/1/1409:09:22

間違いなく、「bch********」さんのやり方が正解なのですが、単純な「文字列」と考えた場合は、

FP = "D:\A\B\C\D\E\FILE.TXT"
Y = InStrRev(FP, "\")
P = Left(FP, Y)
F = Mid(FP, Y + 1)
MsgBox("Path = " & P & vbCrLf & "FileName = " & F)

となります。

「InStrRev()」関数は、指定した文字が何文字目にあるかを返すのですが、指定した文字を後ろから探します。

前から探す「InStr()」は、前から探して、何文字目か返します。

上記の例でしたら、「InStr("D:\A\B\C\D\E\FILE.TXT", "\")」では、前から3文字目に「\」があるので、「Y」には「3」が入るわけです。

それに対して、「InStrRev("D:\A\B\C\D\E\FILE.TXT", "\")」ですと、後ろから「\」を探すので、後ろから9文字目の「\」が最初に見つかります。

しかし、返す値は、あくまでも「前から何文字目」なので、「13」となります。

これで、最後の「\」マークが何文字目か分かったので、左から「13」文字目までを取り出せば、「P」になり、「13+1」文字目から後ろを取り出せば、「F」が求められます。

それをしているのが、

P = Left(FP, Y)
F = Mid(FP, Y + 1)

です。

もちろん「Left()」関数は、左から何文字取り出し、ですし、「Mid()」は、何文字から何文字取り出す関数です。

たとえば、「Mid("1234567890", 3, 2)」なら、「1234567890」の3文字目から2文字取り出しですから、「34」が返ってきます。

しかし、今回のように、何文字目から最後までの場合は、「何文字取り出す」という最後の数字を省略すると、最後まで取り出されます。

したがって「Mid("1234567890", 3)」だけなら「34567890」となるわけです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる