出産前後の痔にはご注意!

コマンドプロンプトからコピー等を実行する際、空白を含むパス対策として"で囲む方法があるそうですが、「空白のないパス」を囲んでもいいですか?

プログラムからバッチファイルを作り実行する際、パスに空白を含むかどうか判別するのが面倒なので、全部囲ってもいいか?という事です。

A 回答 (2件)

こんにちは。


やってみました。
C:\Users\Hoge>copy "a b c.txt"
ファイルを同じファイルにコピーすることはできません。
0 個のファイルをコピーしました。

C:\Users\Hoge>copy "a b c.txt" "e f g.txt"
1 個のファイルをコピーしました。

C:\Users\Hoge>copy "abc.txt" "efg.txt"
1 個のファイルをコピーしました。

大丈夫のようです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
出来るようですね。

お礼日時:2015/01/19 21:00

いいです。


「空白のないパスでも」常に囲むようにすればまったく問題ありません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
安心しました。

お礼日時:2015/01/19 21:02

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

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

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

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

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:\

QDOSコマンドのFOR文で空白を含むファイルパスの指定方法

DOSコマンドのFOR文で空白を含むファイルパスの指定方法

DOSコマンドのFOR文で、FORの繰り返し条件に
空白を含むファイルパスを指定する方法を教えてください。


やりたいことのイメージはこんな感じです。
for /f %%a in (C:\Documents and Settings\user\デスクトップ\list.txt) do (
echo %%a
)

バッチファイルとlist.txtを同じディレクトリに配置し、かつ
FOR文の前にCDを含めない事を条件にすれば
下記でもうまくいきます。
for /f %%a in (list.txt) do (
echo %%a
)

他のコマンドとの関係からこの前の処理で一度ディレクトリの
変更を行なう処理を含むため、FOR文で指定するファイルは
絶対パス指定をしたいと思っています。

簡単なことのような気もするのですが、
もしかしたら出来ないのかもしれないとも思っています。


FORの繰り返し条件に空白を含むファイルパスを
指定することはできるのでしょうか?
出来るのならばその方法を教えてください。

よろしくお願いします。

DOSコマンドのFOR文で空白を含むファイルパスの指定方法

DOSコマンドのFOR文で、FORの繰り返し条件に
空白を含むファイルパスを指定する方法を教えてください。


やりたいことのイメージはこんな感じです。
for /f %%a in (C:\Documents and Settings\user\デスクトップ\list.txt) do (
echo %%a
)

バッチファイルとlist.txtを同じディレクトリに配置し、かつ
FOR文の前にCDを含めない事を条件にすれば
下記でもうまくいきます。
for /f %%a in (list.txt) do (
echo %%a
)

他のコマンドとの関係からこの前の...続きを読む

Aベストアンサー

for文の括弧内に空白を含むファイルパスを指定したい時には、"usebackq"オプションを使用します。
このオプションにより、括弧内で使用される各種引用符の使い方が変わります。

使用しない⇒"usebackq"を使用する
ファイル名⇒"ファイル名" (空白を含むファイルパスが使用できるようになる)
"文字列"⇒'文字列'
'コマンド'⇒`コマンド`

for /f "usebackq" %%a in ("C:\Documents and Settings\user\デスクトップ\list.txt") do (
echo %%a
)

詳しくは、"for /?"でヘルプを参照してください。

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

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

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

Aベストアンサー

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

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

区別するなら、

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

QDirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)

いろいろ調べましたが不明な点があり、質問します。

WindowsのDOSプロンプトでdirコマンドを打つとフォルダ・ファイルの一覧が表示されますが、その中にファイルサイズが表示されています。
このサイズを合計できるコマンドはありませんか?
DIRコマンドのオプションを調べましたがそれらしいものが見当たりません。
具体的には
C:\xxx\配下に50個程度のファイルがあります。
その50個の合計サイズを知りたいです。
xxxフォルダの親フォルダにはアクセス不可です。

ずーっと悩んでいます。よろしくお願いします。

なお、OSはWindowsNTか2000で使用予定です。

Aベストアンサー

カレントドライブ、カレントフォルダを
C:\xxx\
にした状態で、

dir /s /a-d

/sパラメータででサブディレクトリすべてを検索
/a-dパラメータでディレクトリ以外のファイル(つまり属性に関係なくすべてのファイル

これを実行すると最後にファイルの個数とファイルサイズの合計を表示します。

もし、隠し属性のファイルは合計しないのであれば、

dir /s

だけで良いと思われます。

QDOSコマンドでファイルをコピーできない。

xcopy "d:\MY documents\" "f:\My Documents\" /d /s
上記コマンドを記述したバッチファイルを実行すると
C:\Documents and Settings\倉庫番.PC.000\デスクトップ>xcopy "d:\MY documents\" "f:\My Documents\" /d /s
無効なパスの指定です
0 個のファイルをコピーしました

C:\Documents and Settings\倉庫番.PC.000\デスクトップ>pause
続行するには何かキーを押してください . . .

とエラーがでます。なぜでしょうか?
d:\はノートPCのdドライブ、fはUSB接続したHDです。
更新したファイルだけをバックアップしたいのですが・・・
宜しくお願いします。

Aベストアンサー

なんか違う答えを教えられているようでかわいそうなので…
現在の
xcopy "d:\MY documents\" "f:\My Documents\" /d /s
を以下のようにフォルダ名の直後の \ を取り除いてください。

xcopy "d:\MY documents" "f:\My Documents" /d /s

これで正しくコピーされると思います。

Q絶対パス名からファイル名を取り出して、変数に格納するバッチ

DOSコマンドバッチで定義した変数"fullpath"に絶対フルパス名が格納されているとします。
この変数からファイル名だけを抽出して別の変数"filenae"に格納したいのですが方法がわかりません。

1. set fullpath = "C:\test\test.c"
2. ----ここの部分をどのように処理すれば?------
3. set filename = fullpathから抽出したファイル名

私がやってみた方法として、for文とdir /bを組み合わせてみたのですが
for %a in ( dir /b c:\test\test.c ) do set filename =%a

本来dir /bを実行するとファイル名のみが表示されるのに、For文をかますと絶対フルパスでfilenameに値が格納されてしまいます。

dir /b c:\test\test.cの結果を直接filename変数に格納できれば解決するのですが、コマンド結果を変数に格納するにはFor文を使わないとだめなんですよね?
なにかよい方法はないでしょうか?

DOSコマンドバッチで定義した変数"fullpath"に絶対フルパス名が格納されているとします。
この変数からファイル名だけを抽出して別の変数"filenae"に格納したいのですが方法がわかりません。

1. set fullpath = "C:\test\test.c"
2. ----ここの部分をどのように処理すれば?------
3. set filename = fullpathから抽出したファイル名

私がやってみた方法として、for文とdir /bを組み合わせてみたのですが
for %a in ( dir /b c:\test\test.c ) do set filename =%a

本来dir /bを実行するとファイル名...続きを読む

Aベストアンサー

@echo OFF
setlocal
set fullpath="C:\test\test2.c"
Call :BASENAME %fullpath%
echo %fname%
Goto :EOF
:BASENAME
set fname=%~nx1

詳しくは、call /? または for /?

Qbatファイルで、call使っても戻ってこない

こんにちは
教えてほしいことがあります。

batファイルで他のbatファイルを実行するためにcallで呼び出すと、処理がまた戻ってくる事を知り、
以下のようにやってみたのですが、戻ってきている様子がありません。

どこが間違っているのか教えていただければと思います。

以下file-backup.bat

echo 処理開始 >> %LOG%
date /t >> %LOG%
time /t >> %LOG%

C:\****\Backup\FastCopy198\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="-2D" "D:\file2" "/to=\\********\file2"

@echo off
call "Z:\file-backup2.bat"

echo 処理終了 >> %LOG% ←---これ以下がログファイルに表示されない
time /t >> %LOG%
echo. >> %LOG%


ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。

環境はwinserver2008です。

ご教授お願いします。

こんにちは
教えてほしいことがあります。

batファイルで他のbatファイルを実行するためにcallで呼び出すと、処理がまた戻ってくる事を知り、
以下のようにやってみたのですが、戻ってきている様子がありません。

どこが間違っているのか教えていただければと思います。

以下file-backup.bat

echo 処理開始 >> %LOG%
date /t >> %LOG%
time /t >> %LOG%

C:\****\Backup\FastCopy198\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="-2D" "D:\file2" "/to=\\*****...続きを読む

Aベストアンサー

>どこが間違っているのか教えていただければと思います。
--> call で戻っている可能性があるのに断定している処。

> ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。
--> それは考えがおかしい。そう思うなら
  echo 処理終了
  とでも変えればいいです。表示されたら戻っている訳ですから。
  そもそも %LOG% には絶対パスでファイル名をセットしていますか?
  多分、カレントが変わってしまっていると予想します。

Qxcopyで特定のファイルのみをコピーする方法

xcopyもしくはcopyコマンドを使用し、ディレクトリ内の特定のファイル(複数)を
コピーするにはどのようにしたら良いのでしょうか?

特定のファイルの数が多すぎるため、一行ずつコマンドを書くのは手間が掛るため、
何か良い方法があれば教えて頂きたいと思います。

excludeオプションを使用すれば特定のファイルを除外できるようですが、
反対の意味の特定のファイルのみをコピーしたいです。

例)
c:\test内は以下のファイルがあります。
・aaa.txt
・bbb.txt
・ccc.txt
・ddd.txt
・eee.txt

これらのファイルの内、bbb.txtとddd.txtとeee.txtをコピーしたいです。

Aベストアンサー

よくこんな感じでやってました。
バッチ用コマンドですがバッチファイルを作らずコマンドラインで実行させます。
( コピー先フォルダを C:\distdir\ とします。)

コマンドラインでこれ
for %a in ( bbb.txt ddd.txt eee.txt ) do xcopy c:\test\%a c:\distdir
を実行させると、

カッコ ( ) の中からファイル名を1個拾っては %a に代入し do 以下を実行します、
つまり以下の3コマンドに展開し1個ずつ実行します。
xcopy c:\test\bbb.txt c:\distdir
xcopy c:\test\ddd.txt c:\distdir
xcopy c:\test\eee.txt c:\distdir

尚、この場合は拡張子がいずれも txt なので、以下のように書くと文字数を若干減らせます。
1コマンドラインの文字数は限りがあるので、ファイル数が多くて他の部分を縮めたい時に有用です。
for %a in ( bbb ddd eee ) do xcopy c:\test\%a.txt c:\distdir

ところで、文法を正確に記憶してなくて恐縮ですが、
Windows 配下のコマンドプロンプトが備えるコマンドでは、
予め対象のファイル名リストをテキストファイルで作っておき、
そこからファイル名を1個ずつ拾ってコマンド実行させる事が可能です。

よくこんな感じでやってました。
バッチ用コマンドですがバッチファイルを作らずコマンドラインで実行させます。
( コピー先フォルダを C:\distdir\ とします。)

コマンドラインでこれ
for %a in ( bbb.txt ddd.txt eee.txt ) do xcopy c:\test\%a c:\distdir
を実行させると、

カッコ ( ) の中からファイル名を1個拾っては %a に代入し do 以下を実行します、
つまり以下の3コマンドに展開し1個ずつ実行します。
xcopy c:\test\bbb.txt c:\distdir
xcopy c:\test\ddd.txt c:\distdir
xcopy c:\test\eee.txt ...続きを読む

QDOSコマンドで共有ファイルへアクセスを行う際のパスの書き方

初めまして。

本題になります・・・

DOSコマンドで共有ファイルのアクセスを行う際のパスの書き方は、
「\\サーバー名\共有フォルダ名\ファイル名」ですが、DIRなどを行うと、認証が走って、ファイルへのアクセスが出来ません・・・全てDOSコマンド(バッチ)で完結したいのですが・・・
例えば、「dir \\サーバー名\共有フォルダ名\ファイル名」とした場合に、「ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。」と表示されてしまいます。
現在行いたい処理は、他サーバーの「共有ファイルのコピー&削除」、「共有フォルダの作成」です。

【環境】
コマンド実行させるサーバー:[WIN2KSEVER(admini権限/パスワード共通)]
他サーバー:[WIN2KSERVER(admini権限/パスワード共通)]

解決する方法がありましたら、お教え下さい。
お願いします。

Aベストアンサー

実際に試してみました。

net use \\サーバー名 パスワード /user:ユーザー名
dir \\サーバー名\共有フォルダ名\ファイル名

でいけました。


人気Q&Aランキング