毎回、名前や拡張子の異なる任意のファイル(例:ABC.wmv)を.vbsにドラッグすると、
ファイル名を共通項として以下の一連の操作を自動で行ってくれるようにしたいのですが、
構文を教えていただけますでしょうか。
1)ドラッグしたファイルと同名のフォルダを同階層に作成する(例:ABC(拡張子なし))
2)ABC.wmvをABCフォルダ内に移動
3)ABCフォルダ内に、ABC.txtを作成
4)ABC.txtの文中の特定部分に"ABC.wmv"と記述する
※手順3,4は統合しても構いません。(.txt作成時に4も指定してしまうと思われますが・・)
※ABC.txtの内容は以下です。"ABC.wmv"の部分だけ、ドラッグしたファイル名に差し変わるようにしたいです。
このフォルダは、 ←定型
"ABC.wmv" ←ドラッグしたファイル名が入る
を保管しています。 ←定型
line=の行の下に以下の行を追加すればよいです。
line="このフォルダは"& vbCrLf & line & vbCrLf & "を保管しています。"
ちなみにvbsを使わなくて,バッチファイルでも同様のことが出来ます。
----- test.bat ここから -----
@echo off
REM 1)ドラッグしたファイルと同名のフォルダを同階層に作成する(例:ABC(拡張子なし))
mkdir "%~dpn1"
REM 2)ABC.wmvをABCフォルダ内に移動
move %1 "%~dpn1"
REM 3)ABCフォルダ内に、ABC.txtを作成
REM 4)ABC.txtの文中の特定部分に"ABC.wmv"と記述する
echo このフォルダは、> "%~dpn1\%~n1.txt"
echo %~nx1 >> "%~dpn1\%~n1.txt"
echo を保管しています。>> "%~dpn1\%~n1.txt"
----- test.bat ここまで -----
%~なんとかの部分の解説は スタート→ヘルプとサポート→for で検索して Forのヘルプを参照すると書いてあります。
%1: 第1引数
d: ドライブ名
p: パス名
n: 拡張子なしファイル名
x: 拡張子
ファイルと同名のフォルダ: ドライブ+パス+ファイル名 = %~dpn1
ABCフォルダ内のABC.txt: ドライブ+パス+ファイル名¥ファイル名.txt = %~dpn1\%~n1.txt
フォルダが既に存在していた場合などのエラー処理書いてないですが、こんな感じかと思います。
コメントを書くために結構冗長な書き方ですが、実際にはもう少し簡潔に書いて良いかと思います。
If WScript.Arguments.Count <> 1 Then MsgBox("ファイル名を指定するか、ファイルをドロップして下さい") WScript.Quit(0) End If Set fso = CreateObject("Scripting.FileSystemObject") file = WScript.Arguments(0) ' ファイルのパス部分のみ取得する base = fso.GetParentFolderName(file) If Len(base) = 0 Then ' コマンドラインから相対パスで指定した場合用のおまじない base = "." End If ' ファイルの拡張子を抜いたファイル名部分を取得する name = fso.GetBaseName(file) ' フォルダ名を作成する path = base & "\" & name ' フォルダを作る Call fso.CreateFolder(path) ' 移動先のファイル名を作成する file_to = path & "\" & fso.GetFileName(file) ' ファイルを移動する Call fso.MoveFile(file, file_to) ' テキストファイルを作りストリームを取得する Set stm = fso.CreateTextFile(path & "\" & name & ".txt", true) ' 書き込む内容を作成する line = fso.GetFileName(file) ' ファイルに書き込む stm.WriteLine(line) ' ファイルストリームを閉じる Call stm.Close() ' 後片付け Set stm = Nothing Set fso = Nothing
すばらしいご回答をありがとうございます。
調べたのですが断念したので、重ねて質問させてください。
作成されたtxtの内容は以下の3行のようにしたいと思い、
line = fso.GetFileName(file)のあたりに色々な記述をしてみたのですが、ダメでした。
構文をお教え願えますでしょうか。
1行目:このフォルダは、 ←定型
2行目:"ABC.wmv" ←ドラッグしたファイル名が入る(お教えいただいた通りでした)
3行目:を保管しています。 ←定型
line=の行の下に以下の行を追加すればよいです。
line="このフォルダは"& vbCrLf & line & vbCrLf & "を保管しています。"
ちなみにvbsを使わなくて,バッチファイルでも同様のことが出来ます。
----- test.bat ここから -----
@echo off
REM 1)ドラッグしたファイルと同名のフォルダを同階層に作成する(例:ABC(拡張子なし))
mkdir "%~dpn1"
REM 2)ABC.wmvをABCフォルダ内に移動
move %1 "%~dpn1"
REM 3)ABCフォルダ内に、ABC.txtを作成
REM 4)ABC.txtの文中の特定部分に"ABC.wmv"と記述する
echo このフォルダは、> "%~dpn1\%~n1.txt"
echo %~nx1 >> "%~dpn1\%~n1.txt"
echo を保管しています。>> "%~dpn1\%~n1.txt"
----- test.bat ここまで -----
%~なんとかの部分の解説は スタート→ヘルプとサポート→for で検索して Forのヘルプを参照すると書いてあります。
%1: 第1引数
d: ドライブ名
p: パス名
n: 拡張子なしファイル名
x: 拡張子
ファイルと同名のフォルダ: ドライブ+パス+ファイル名 = %~dpn1
ABCフォルダ内のABC.txt: ドライブ+パス+ファイル名¥ファイル名.txt = %~dpn1\%~n1.txt
ご回答ありがとうございます。
実のところバッチファイルの作成も挑戦していたのですが、ドラッグ&ドロップで頓挫してあきらめていました。
コマンドプロンプトであれば、私のスキルでもファイル名を変えたりフォルダをどこかに移動したりという
この先の目的が達成できそうですので、お教えいただいて非常に非常に助かりました。
ご回答ありがとうございます。
実のところバッチファイルの作成も挑戦していたのですが、ドラッグ&ドロップで頓挫してあきらめていました。
コマンドプロンプトであれば、私のスキルでもファイル名を変えたりフォルダをどこかに移動したりという
この先の目的が達成できそうですので、お教えいただいて非常に非常に助かりました。