(cache)バッチファイルでクリップボードの文字を使う -バッチファイルにてフォ- その他(プログラミング・Web制作) | 教えて!goo

『L・DK』上白石萌音&杉野遥亮インタビュー!

バッチファイルにて
フォルダを作成し、ファオルダの名前にクリップボードにコピーされている文字を使いたいのですが、お分かりの方、教えてください。お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

DOSコマンドではクリップボードの内容を取り込むコマンドが無いので


標準のままでは、バッチ処理は不可能です
クリップボードの操作が可能な外部プログラムが必要になります

ということで、VBスクリプトで同様の動作を実現できるものを

http://www.whitire.com/vbs/tips0170.html
http://vbscript.infopos.net/p/000035.html

上記サイトのサンプルを合体させて
------
Option Explicit
On Error Resume Next

Dim objFS
Dim objIE
Dim strCbData
Dim str_path
Dim Fname1

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objIE = CreateObject("InternetExplorer.Application")
If Err.Number = 0 Then
objIE.Navigate("about:blank")
strCbData = objIE.document.parentwindow.clipboardData.GetData("text")
Fname1 = ".\" & strCbData
str_path = objFS.CreateFolder(Fname1)
MsgBox str_path
objIE.Quit
Else
WScript.Echo "エラー:" & Err.Description
End If

Set objIE = Nothing
------

こんな感じで、一応動きますが

単純に組み合わせただけなので、クリップボードに文字列以外のデータやファイル名に利用できない文字列などのエラー処理はされていません
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

これでクリップボードの情報を取得出来ることは確認できましたが、フォルダはどうやって作るのでしょうか?拡張子がbatのバッチファイルしか知らないので、よろしくお願いいたします。

お礼日時:2012/12/28 07:53

それではその他の方法



少々強引な処理になりますが
************

dim Txtfile
dim WShell

Txtfile = "C:\Users\ユーザ名\Desktop" ’ユーザ名をご自身のユーザ名に変更

Set WShell = WScript.CreateObject("WScript.Shell")

WShell.Run "explorer """ & Txtfile & """"
WScript.Sleep(2000)
WShell.SendKeys "+^{F10}" 'メニュー画面表示
WScript.Sleep(200)
WShell.SendKeys "X" '新規作成
WScript.Sleep(200)
WShell.SendKeys "F" 'フォルダ
WScript.Sleep(3000)
WShell.SendKeys "^V" '貼付け
WScript.Sleep(1000)
WShell.SendKeys "{ENTER}" '決定
WScript.Sleep(500)
WShell.SendKeys "%{F4}" '強制終了

************

Explorer.exeでディスクトップを開く
あとはショートカットキーの操作をSendKeysで実行
http://www.accessclub.jp/samplefile/help/help_18 …

環境によってWScript.Sleepのタイムを調整しないと正しく実行されない可能性があります
(基本的に長くすればするほど確実に動作しますが、その分処理に時間がかかります)

その他の方法としては

エクセルでフォルダ作成の自動実行マクロを作成し、VBSから非表示で呼び出す方法もあります
(この場合は処理速度も早く、処理が画面上に表示されないが、エクセルがないと実行できない)
    • good
    • 0
この回答へのお礼

何度も回答ありがとうございました。

お礼日時:2013/01/01 08:49

>実行時に”クリップボードへのアクセスを許可しますか”というメッセージが出るの


ですが、これを出ないように出来ないのでしょうか?

これを出さないようにするにはIE⇒ツール⇒インターネットオプションのセキュリティ設定でスクリプト処理の無条件許可が必要になるので、セキュリティ上お薦めできません
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
batファイルだと、出ないのに、色々違いがあるのですね。

お礼日時:2013/01/01 08:48

>大元の質問にあるファルダを作成することを言っています



スクリプトを実行すればフォルダが作られるはずですが、出来ていませんか?

VBでもクリップボードの内容取得はできないので、一部IEの機能を利用しています
スクリプト実行時にIEから【スクリプトを実行しますか】のメッセージは出ていませんでしたか?

メッセージが出ていないようなら、スクリプトがブロックされている可能性があるため、IEセキュリティ設定とセキュリティソフトの設定を変更する必要があります
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
フォルダはちゃんと出来ていました。最初、デスクトップで他のアイコンと紛れて分かりませんでした。

実行時に”クリップボードへのアクセスを許可しますか”というメッセージが出るのですが、これを出ないように出来ないのでしょうか?

お礼日時:2012/12/28 17:10

>フォルダはどうやって作るのでしょうか?拡張子がbatのバッチファイルしか知らないので



フォルダ?
多分VBスクリプトファイルの事かと推測して

通常のバッチファイルと同様にメモ帳などに貼り付け、拡張子vbsで保存
実行手順はバッチファイルと同じ

ちなみに大元の質問内容ですが


>フォルダを作成し、ファオルダの名前にクリップボードにコピーされている文字を使いたい

この操作自体、新しいフォルダーの作成先で
右クリック>新規作成>フォルダ>反転している名前の上で右クリック>貼り付け
とマウス操作のみ5回クリックするだけで終了しますが、バッチ処理する必要性が有るのでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>フォルダ?
>多分VBスクリプトファイルの事かと推測して

こうではなくて大元の質問にあるファルダを作成することを言っています。


>この操作自体、新しいフォルダーの作成先で
右クリック>新規作成>フォルダ>反転している名前の上で右クリック>貼り付け
とマウス操作のみ5回クリックするだけで終了しますが、バッチ処理する必要性が有るのでしょうか?

マウスを5回操作せずに1回でやりたいのです。
ですからバッチファイルでフォルダを作成したくて、そのフォルダ名はクリップボードから持ってきたいのです。

お礼日時:2012/12/28 11:09

ググってみましょう。


参考サイトとかいっぱいひっかかりますよ

参考URL:http://www.fpcu.jp/dosvcmd/bbs/log/cat1/4-1622.h …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
残念ながら参考サイトを見ても、良くわからないので、質問に対する回答を具体的にお願いします。

お礼日時:2012/12/27 18:23

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

あなたにオススメのQ&A
その他(プログラミング・Web制作)
(2019年5月15日)
win7(32bit)、python3.4.4を使用していますコマンドプロンプトで「python」と入力し、pythonを実行可能なようにし、その状態で、「python -v」と打った場合、「Name…
AD(ゴッソトリノ on 息さわやか事務局)
Excel(エクセル)
(2019年5月1日)
設備点検の個人自営業者です。点検の報告書はエクセル(仕事仲間の誰かが作成したもの)ですが日付欄は例えば5/1と入力すれば「平成31年5月1日」と表示されます。セルはユーザー定義で「ggge”年"m"月…
避妊
(2019年4月29日)
付き合っている彼と今度旅行先で初めて性行為をします。行為自体嫌ではないのですが、排卵日が被ってしまっていて、ゴムを付けて外に出したとしても不安です。彼は「不安ならしなくていいよ」と言ってくれているので…
AD(beauty-topic)
その他(恋愛相談)
(2019年5月10日)
えっちなこと。彼氏がよく、最近1人でした?とかいつしたのが最後なの?とか、したかった?とか聞いてきます。恥ずかしいから答えないですけど(笑)寂しいと1人でするものだと思ってるのかわからないですが、どう…
AD(お金のデザイン on THEO)
国産車
(2019年4月20日)
高齢者の暴走事故でプリウスが多いと思います。踏み間違いだと結論は出てますが。メーカーは、対策は考えてないのでしょうか ?。
AD(サン・クロレラ販売株式会社)
AD(ステラ漢方)
Recommended by

あなたにオススメの記事

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qバッチファイル 文字列にスペースがある場合

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\

これはcドライブのa aaというフォルダ名の中を検索するコードですが、
フォルダ名にスペースがあるため、うまく動きません。

"a aa"のように""で囲ってみましたが、駄目でした。

どうすれば良いのか、教えていただきたいので、お願いします。

Aベストアンサー

for /f %%A in ('dir /b /s c:\"a aa"\*.pdf') do echo copy "%%A" D:\
のようにecho でどのようなコマンドが実行されているか確認しましょう。

この記述ではdirコマンドで表示されるパスの中に空白があるため %%A には空白までの文字列しか代入されません。
以下のように修正して試してみてください。

for /f "delims=" %%A in ('dir /b /s c:\"a aa"\*.pdf') do copy "%%A" D:\

Qバッチでテキストファイルから任意の行のみ取得したい

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数Textに入れる(set Text=222)
4.変数Textを使用し色々処理をする
-----------------------------------------
コレを繰り返します。
2と4は同じ動作ですので、行数のカウンタを設定しループさせる予定です。
n行目を全て取り出す方法がわかれば行けると思うのですが、
どうも見つかりません。ご存知の方がいればお教え願いたいと思います。

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数T...続きを読む

Aベストアンサー

No3ですが、たぶん提示したスクリプトを見ると、ある事に気がつくはず?

findstr /n /r "." a.txt | findstr /r "^3:"

で3行目を表示してくれます。え!? それだけ。そうなんです

ただ、あと、先頭の”3:” をどうやって切り離すか? と言う問題にぶつかる。さらにファイルに先頭に”3:”があった場合、どうするのか? さらに、findstr の正規表現の動作が??? 表示すれるのはいいが、変数にどうやってセットするのか?

となる。結局 for 文を使いまわす事になります。

まあ、適当に改変して、上記の問題を解決してください。

Qbatファイル処理でのテキストファイルの内容を編集

batファイル処理のみにてテキストファイルの内容を編集する事は可能でしょうか。

例えば
aaa=0
bbb=0
ccc=0
ddd=0

という内容のテキストファイルが存在し、batファイルにて
aaa=0
bbb=1
ccc=1
ddd=0

というように、指定行の内容を変更させたいのですが、この処理をbatファイルのみで行う事は可能でしょうか。

宜しくお願いします。

Aベストアンサー

こんな感じですか?
パスは適切に設定してください
----- a.bat -----
cd c:\foo\bar
if exist test.bak goto skip
copy test.ini test.bak
cscript a:\hogehoge\replace.vbs test.ini
:skip
----- a.bat ここまで -----

----- replace.vbs -----
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strText = Replace(strText, "bbb=0", "bbb=1")
strText = Replace(strText, "ccc=0", "ccc=1")

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.WriteLine strText
objFile.Close
----- replace.vbs ここまで -----

参考URL:http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx

こんな感じですか?
パスは適切に設定してください
----- a.bat -----
cd c:\foo\bar
if exist test.bak goto skip
copy test.ini test.bak
cscript a:\hogehoge\replace.vbs test.ini
:skip
----- a.bat ここまで -----

----- replace.vbs -----
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
obj...続きを読む

Qバッチ終了時にDOS窓を閉じるコマンド

自作バッチについて質問があるのですが、
バッチ終了時にDOSプロンプトを自動的に閉じる方法を教えて下さい。

以下の方法は知っているのですが↓
------------------------------------------------------------
バッチのプロパティ画面の「プログラム終了時にウィンドウを閉じる」を
チェックする
------------------------------------------------------------

上記のようなやり方ではなく、バッチファイルの中に直接コマンドを書いて
設定する方法を教えて下さい。

Aベストアンサー

バッチファイルでウィンドウを閉じるのはexitコマンドです。

exit

だけを記述したバッチファイルを作って実行してみると確認出来ます。

Qコマンドプロンプトの「%1」と「%~1」の違いがわからない

コマンドプロンプトの「%1」と「%~1」の違いがわからない
このサイトにhttp://ykr414.com/dos/bat.html
%~1は「全ての引用句(")を削除して%1を展開する。」とありますがよくわかりません。

%1は入力されたファイルのフルパスだと思っているのですけど。
"%1"=%~1ということでしょうか。

Aベストアンサー

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割する)

一方、例えば、マイドキュメントフォルダ「C:\Documents and Settings\ユーザー名\My Documents」を引数にを指定した場合、そのままだとフォルダ名に空白が入ってるので、
%1=C:\Documents
%2=and
%3=Settings\ユーザー名\My
%4=Documents
と、指定した一つの名前が複数の引数に分断されてしまします。

そこで、こういう場合には、ダブルクオートでファイル名を括ります。
プログラム起動時の引数に 「"C:\Documents and Settings\ユーザー名\My Documents"」
といった感じで、ダブルクオートを付けたものを指定すると、
%1="C:\Documents and Settings\ユーザー名\My Documents"
と、括られた部分がまとめて一つの引数と取り扱われるようになります。
そして、この時%~1は
%~1=C:\Documents and Settings\ユーザー名\My Documents
になります。

%1と%~1の使い分けですが、
引数をこのままファイル名として使う時は、%1をそのまま使えば問題ないのです。
(バッチファイルから別のプログラムを起動するときにファイル指定するとかだったら、
%1を使えば、ダブルクオート込みで渡されるので、そのまま一つの引数としてつかます)

一方、フォルダを指定してそのフォルダ下のファイル名を作る、といった処理をしようとする時には、
ダブルクオートが邪魔なので、そういう時は%~1を使います。
たとえば、指定した引数をフォルダとして、そのフォルダ下の「新規作成データ.txt」ファイルを表すフルパスのファイル名を作りたい場合、

単に
 「%1\新規作成データ.txt」とすると、「"C:\Documents and Settings\ユーザー名\My Documents"\新規作成データ.txt」になってしまいますが、

「"%~1\新規作成データ.txt"」とすれば「"C:\Documents and Settings\ユーザー名\My Documents\新規作成データ.txt"」という、正しくクオートされたファイル名を作ることができます。

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割す...続きを読む

Qbatプログラム上で文字列を入力する方法!!

batファイルの中で文字列を入力するPGMは作れないでしょうか?
例えば、INPUTBOXみたいな感じで自分で文字を入力したいのですが。
よろしくお願いします。

Aベストアンサー

例です
-----------------------------------------------
@echo off
set /p INP="金額を入力してください >"
echo 金額は%INP%と入力されました。
----------------------------------------------

これを実行してみればわかると思います。

QDOSのバッチで、テキストファイル中の文字を置換したい

いつもお世話になっております。

WindwsXPでDOSバッチを使ってテキストファイル中にある文字列1を文字列2に置換したいのです。
ネットをさまよっていて、こんな例を見つけました。
(参考にしたのはここです。http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html)

======================
@echo off
if "%1"=="" goto end
set fname=%1
copy %fname% org >nul
type nul >%fname%
for /f "tokens=1* delims=" %%a in ( org ) do (set line=%%a&& call :sub)

del org
goto end

:sub
:この1行下の acb=xyz に置換前と置換後の文字列を指定する。
set l=%line:abc=xyz%
echo %l%>>%fname%
goto :EOF

:end
======================

これをsample.batという名前で保存し、DOSのウィンドウでsample < a.txt と打つと、a.txtファイル中の"abc"が"xyz"に置き換わります。

これに手を入れて置換前と置換後の文字列を可変にしたく思い、sub中に

set mae=abc
set ato=xyz

の2行を加え、変数に値を設定するようにしました。

ところが、次の1行の書き変え方がわかりません。

set l=%line:abc=xyz%



set l=%line:%abc%=%xyz%%

のように変えてみましたが、うまく動きません。

どなたかご教授いただけませんか。DOSだけでファイル中の文字列の置換ができればset文を使う使わないにはこだわりません。

いつもお世話になっております。

WindwsXPでDOSバッチを使ってテキストファイル中にある文字列1を文字列2に置換したいのです。
ネットをさまよっていて、こんな例を見つけました。
(参考にしたのはここです。http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html)

======================
@echo off
if "%1"=="" goto end
set fname=%1
copy %fname% org >nul
type nul >%fname%
for /f "tokens=1* delims=" %%a in ( org ) do (set line=%%a&& call :sub)

del org
goto end

:sub
...続きを読む

Aベストアンサー

No.5 です。

>勝手に引用してしまってすみません。
皆さんに参考にしてもらうために回答しているので気になさらずに引用してください。

さてご質問の件ですが、

◆予備知識
まず、環境変数を%で囲むと、バッチがその行を実行するときに環境変数の中身に置き換えられることを理解してください。
例)
set mae=abc
set ato=xyz

echo %mae% %ato% ←※

※の行が実行されるとき、実際は
echo abc xyz
と置き換えられてecho文が実行されます。

また、バッチ内では %% と%が2つ並んだ記述は1つの%に置き換えられます。

例)echo 10割は100%%
10割は100%


◆今回の場合

call set l=%%line:%mae%=%ato%%%
↓実行されるときに以下のように置き換えられます。
call set l=%line:abc=xyz%

置き換え後に call 文が実行されます。このcall文の記述だと set l=%line:abc=xyz% という1行のバッチを呼び出しているのと同等の動作になります。従って環境変数lineに入っている文字列のabcがxyzに置き換えられた結果が環境変数lに代入されます。
call文でワンクッション置いて、先に環境変数の mae と ato (と%%)だけ評価(環境変数の中身に置き換え)するようにしています。

◆単純に set l=%line:%mae%=%ato%% とした場合なぜうまくいかないか

set文の右辺の各要素を分けて書くと

%line:%(line: という環境変数の中身)→そんな変数は定義していないので空に置き換え

mae

%=%(= という環境変数の中身)→そんな変数は定義できないので空に置き換え

ato

%% → % に置き換え

と解釈されて
環境変数lには maeato% という文字列が代入されてしまいます。


余談ですがバッチ実行時にどのように置き換えられるか見たい場合は、
バッチ先頭のecho offの行を取って実行するとよく分かります。

No.5 です。

>勝手に引用してしまってすみません。
皆さんに参考にしてもらうために回答しているので気になさらずに引用してください。

さてご質問の件ですが、

◆予備知識
まず、環境変数を%で囲むと、バッチがその行を実行するときに環境変数の中身に置き換えられることを理解してください。
例)
set mae=abc
set ato=xyz

echo %mae% %ato% ←※

※の行が実行されるとき、実際は
echo abc xyz
と置き換えられてecho文が実行されます。

また、バッチ内では %% と%が2つ並んだ記述は1つ...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング