質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

4回答

12818閲覧

xcopyコマンドで「一つ上のディレクトリ」にアクセスしたい

ringomilk

総合スコア22

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

1クリップ

投稿2019/01/16 08:24

編集2019/01/17 01:32

xcopyコマンドで「一つ上のディレクトリ」にアクセスしたい

下記のようなバッチファイルを作成しています。

set /p FOLDER=<C:test.txt xcopy %FOLDER%..\folder1_2\test.txt C:\test.txt

test.txtには"C:\folder1\folder2"という文字列が記載されており、
それを読み込んでFOLDERに渡しています。
処理ではfolder1の並びにあるfolder1_2の下にあるファイルをコピーしたいため
「%FOLDER%..」というように「上のフォルダの」という表現をしたいです。

発生している問題・エラーメッセージ

無効なパラメーターの数です

というエラーが出力されます。

cdコマンド等では使用できる、「一つ上のフォルダ」を表す記号を使用して

%FOLDER%..\folder1_2\test.txt

というパスでコピーを実行することはできますでしょうか。
不可能な場合、代替案を教えていただきたいです。
よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

"FOLDER"には”\folder1\folder2”という文字列が格納されていますが、

set /p FOLDER=<C:\folder1\folder2だと、C:\folder1\folder2というファイルから1行読み出してその内容をFOLDERにセットするという意味です。名前通りC:\folder1\folder2がフォルダーであるなら、エラーになります。

無効なパラメーターの数です

このとき、画面に表示されるXCOPYコマンドのコマンドラインはどうなっていますか?

投稿2019/01/16 12:00

otn

総合スコア84507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ringomilk

2019/01/17 01:30 編集

すみません、「set /p FOLDER=<C:\folder1\folder2」の記載が誤っておりました。 実際にはファイルに「C:\folder1\folder2」という文字列が書かれており、 読み込んで変数に渡しています。本文を訂正いたしました。 >このとき、画面に表示されるXCOPYコマンドのコマンドラインはどうなっていますか? これはどのような意味でしょうか? コピー部分のコマンドラインは質問文にある通り xcopy %FOLDER%..\folder1_2\test.txt C:\test.txt となっています。
otn

2019/01/17 04:17

> これはどのような意味でしょうか? echo offしてない限り、変数の中味を展開した形で、実行するコマンドが表示されるので、その内容という意味です。
guest

0

xcopy じゃなく、copyを使えばどうでしょうか

投稿2019/01/16 10:24

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ringomilk

2019/01/17 01:37

copyコマンドでもやってみましたが、別のエラーが発生してうまくいきませんでした。 コマンドの種類の問題ではないようです。 切り分けができました。ありがとうございました。
guest

0

otnさんの回答にあるように、set /p FOLDER=<C:\folder1\folder2の構文は、C:\folder1\folder2というファイルの中身をFOLDERに格納する意味になります。
しかし試してみたところ、対象がフォルダーの場合アクセスが拒否されました。になるため、本当にC:\folder1\folder2というファイルが存在しているような気がします。
しかしそのファイルの中身が空白で区切られたパス文字列が格納されていないでしょうか。
例えば中身がA Bのように格納されていると、xcopyで使うときに下記のように3つのパラメーターに展開されるので、質問にある無効なパラメーターの数ですというエラーになります。

BAT

1xcopy A B..\folder1_2\test.txt C:\test.txt

C:\folder1\folder2はフォルダーなのか、ファイルなのか。
フォルダーであるなら、set文を見直す。

BAT

1set FOLDER=C:\folder1\folder2

ファイルならxcopy文を見直す。

BAT

1xcopy "%FOLDER%..\folder1_2\test.txt" C:\test.txt

投稿2019/01/16 23:59

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ringomilk

2019/01/17 01:36

すみません、「set /p FOLDER=<C:\folder1\folder2」の記載が誤っておりました。 実際にはファイルに「C:\folder1\folder2」という文字列が書かれており、 読み込んで変数に渡しています。本文を訂正いたしました。 上記の条件のため、 「%FOLDER%..\folder1_2\test.txt」は実際には 「C:\folder1\folder2..\folder1_2\test.txt」となっている認識です。 ttyp03さんのご回答を拝見すると、「..」はxcopyでも使える記号なのですね。 可能性としては読み込むファイルに記載されているパスが間違っていることが考えられますでしょうか。 確認してみます。
ttyp03

2019/01/17 01:40

「..」はxcopyコマンドが解釈するのではなく、OS(?)が解釈するものだと思うので、コマンドによって使える使えないはないと思います。 xcopyコマンドには展開されたパスが渡されるはずです。 念のため「..」が使えることは確認済みです。
guest

0

自己解決

自己解決しました。
原因は、パスを記載するときに「/(スラッシュ)」を使用していたことです。
xcopyの場合は、パスの表記は「¥(バックスラッシュ)」を使うのが正しいようです。
すべて書き換えたところ、うまくいきました。

ご回答いただいた方々、ありがとうございました。

投稿2019/01/17 03:03

ringomilk

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/01/17 04:19

/ と書いて実行しておきながら、質問文には \ と書いたという事ですか???何故???
ringomilk

2019/01/17 05:09

実際に作成したコマンドラインは質問したものよりも大規模で、複雑になっています。 また、外部ファイルから変数に値を代入していたのですが、 そのファイルの中身が「/」になっており、気がつくのに時間がかかってしまいました。 初歩的なミスで大変申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問