web-dev-qa-db-ja.com

指定されたディレクトリが存在しない場合に作成するXCOPYスイッチ?

ビルド後のイベントでXCOPYを使用して、コンパイル済みDLLを出力フォルダーからメインアプリの出力フォルダーにコピーしています。 DLLは、次のように、メインアプリ出力フォルダーの「Modules」サブフォルダーにコピーされます。

xcopy  "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\" 

Modulesフォルダーが存在する場合、コマンドは正常に機能しますが、テスト中にフォルダーが存在しない場合、XCOPYが作成せず、コマンドが失敗することがわかりました。

フォルダーが存在しない場合にフォルダーを作成するXCOPYスイッチはありますか?そうでない場合、フォルダーが存在しない場合、ビルド後のイベントに何を追加してフォルダーを作成しますか?ご協力いただきありがとうございます。

72
David Veeneman

私はこれをコマンドラインで試しました

D:\>xcopy myfile.dat xcopytest\test\

ターゲットディレクトリが適切に作成されました。

そうでない場合は、mkdirのコマンド拡張を有効にしてcmdコマンドを使用してターゲットディレクトリを作成できます。

cmd /x /c mkdir "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"

( '/ x'は、システムでデフォルトで有効になっていない場合にコマンド拡張機能を有効にします。私はcmdに精通していません)

つかいます

cmd /? 
mkdir /?
xcopy /?

詳細については :)

46
MartinStettner

「/ I」を使用する答えは機能していますが、少しのトリックで-ターゲットでファイルではなくディレクトリであることをxcopyに伝えるために、文字\で終了する必要があります!

例:

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder" /F /R /Y /I

動作せず、コード2を返しますが、これは次のとおりです。

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder\" /F /R /Y /I

私のサンプルで使用されているコマンドライン引数:

/ F-完全なソースおよびターゲットファイル名を表示します

/ R-これは読み取り専用ファイルを上書きします

/ Y-既存のファイルを上書きするプロンプトを抑制します

/ I-宛先がディレクトリであると想定します(ただし、末尾は\でなければなりません)

111
psulek

PostBuildステップは嫌いです。ビルドツールの範囲外で多くのことを行うことができます。 MSBuildでコピープロセスを管理し、更新を行う方が良いと考えています。 .csprojファイルは次のように編集できます。

  <Target Name="AfterBuild" Inputs="$(TargetPath)\**">
    <Copy SourceFiles="$(TargetPath)\**" DestinationFiles="$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\**" OverwriteReadOnlyFiles="true"></Copy>
  </Target>
15
Ritch Melton

Xcopyで/ iを使用します。ディレクトリが存在しない場合は、ディレクトリが作成されます。

14
GeekyGuy

Robocopyを使用できます。

robocopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules" /E
6
John Simons

私はcommand.itでこれを試しました。私のために働いています。

if "$(OutDir)"=="bin\Debug\"  goto Visual
:TFSBuild
goto exit
:Visual
xcopy /y "$(TargetPath)$(TargetName).dll" "$(ProjectDir)..\Demo"
xcopy /y "$(TargetDir)$(TargetName).pdb" "$(ProjectDir)..\Demo"
goto exit
:exit
1
Ankit Mori

/ Eを試してください

オプションの完全なリストを取得するには:xcopy /?

0
Steve Wellens

簡単な短い答えはこれです:

xcopy /Y /I "$(SolutionDir)<my-src-path>" "$(SolutionDir)<my-dst-path>\"
0
zezba9000