コマンドラインで「ディレクトリAからディレクトリBにすべてのファイルをコピーする方法を見つけることができないようですが、ファイルがディレクトリBに既に存在する場合は、どのファイルが新しくても上書きしないでください。 、プロンプトを表示しないでください。」
コピー、ムーブ、xcopy、robocopyを使用しましたが、最も近い方法は、robocopyに「AからBにコピーしますが、新しいファイルを古いファイルで上書きしないでください」と言うことですが、それではうまくいきません。 。 xxcopyを調べましたが、Visual Studioのビルド後イベントにサードパーティの依存関係を持たせたくないので、他のSVNユーザーがビルドを行うためにそのツールをインストールする必要があるため、それを破棄しました。
Visual Studio 2010のビルド後イベントにコマンドラインを追加して、 T4 新しいテンプレート用のテンプレート EF モデルオブジェクトが生成されるようにします所属するプロジェクトフォルダに配布されますが、既存のオブジェクト用に再生成されたファイルは、編集される可能性のある宛先ファイルを上書きしません。
T4テンプレートが再生成されるため、ソースファイルは常に新しいものになり、「新しい」スイッチを確実に使用することはできません。
私は可能な項目に対して部分クラスを使用しますが、部分クラスを使用できない他の生成物があります(たとえば、デフォルトのEditorTemplateまたはDisplayTemplate * .ascxファイルの生成)。
解決した類似の問題はありますか?
For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"
Robocopy、、または「Robust File Copy」は、コマンドラインのディレクトリ複製コマンドです。 Windows NT 4.0以降のWindowsリソースキットの一部として利用でき、Windows Vista、Windows 7、およびWindows Server 2008の標準機能として導入されました。
robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO
詳しく説明するには(Hydrargyrum、HailGallaxar、およびAndy Schmidtの回答を使用):
/E
は、空のサブディレクトリを含むサブディレクトリをRobocopyに再帰的にコピーさせます。/XC
は、タイムスタンプは同じでファイルサイズが異なる既存のファイルを除外します。通常、Robocopyはそれらを上書きします。/XN
は、コピー先ディレクトリのコピーよりも新しい既存のファイルを除外します。通常、Robocopyはそれらを上書きします。/XO
は、コピー先ディレクトリのコピーより古い既存のファイルを除外します。通常、Robocopyはそれらを上書きします。Changed、Older、およびNewerクラスを除外すると、Robocopyは、スクリプト環境をロードする必要なく、元のポスターが望むことを正確に実行します。
参照: Technet 、 Wikipedia
ダウンロード元: Microsoftダウンロードリンク(リンクは2016年3月30日に最後に確認されました)
ベリサリウスの解決策は良いです。
その少し簡潔な答えを詳しく説明するには:
/E
は、空のサブディレクトリを含むサブディレクトリをRobocopyに再帰的にコピーさせます。/XC
は、タイムスタンプは同じでファイルサイズが異なる既存のファイルを除外します。通常、Robocopyはそれらを上書きします。/XN
は、ソースディレクトリのコピーよりも新しい既存のファイルを除外します。通常、Robocopyはそれらを上書きします。/XO
は、ソースディレクトリのコピーより古い既存のファイルを除外します。通常、Robocopyはそれらを上書きします。Changed、Older、およびNewerクラスを除外すると、Robocopyは、スクリプト環境をロードする必要なく、元のポスターが望むことを正確に実行します。
これを試すことができます:
echo n | copy /-y <SOURCE> <DESTINATION>
-y
は単に上書きする前にプロンプトを表示するだけであり、これらすべての質問にnをパイプすることができます。したがって、これは本質的に、存在しないファイルをコピーするだけです。 :)
これはバッチファイル形式です。
@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"
Xcopyを使用してこれを行う奇妙な方法があります。
echo nnnnnnnnnnn | xcopy /-y source target
コピーするファイルと同じ数のnを含めるだけで、すべての上書き質問にnと答えます。
robocopy src dst /MIR /XX
/ XX:「eXtra」ファイルとディレクトリを除外します(宛先には存在しますが、ソースには存在しません)。これにより、宛先からの削除が防止されます。 (これがデフォルトです)
私は自分のテストから何かを明確にしたいだけです。
@Hydrargyrumの書き込み:
これは実際には逆です。 XNは「eXclude Newer」ファイルを実行しますが、destinationディレクトリ内のコピーよりも新しいファイルを除外します。 XOは「eXclude Older」を行いますが、destinationディレクトリ内のコピーよりも古いファイルを除外します。
もちろん、いつものように独自のテストを行います。
Robocopyは、まだインストールされていないシステム用にここからダウンロードできます。 (つまり、Windows Server2003。)
http://www.Microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (インストールに再起動は不要)
Robocopy exeへのパスを忘れずに設定してください。これを行うには、[マイコンピュータ]> [プロパティ]> [詳細設定]> [環境変数]を右クリックし、パスシステム変数を見つけて最後に追加します: "; C:\ Program Files\Windows Resource Kits\Tools"またはどこでもそれをインストールしました。すでに存在するパス変数文字列を残し、追加のパスを追加するだけにしてください。
パスが設定されると、belisariusが提案するコマンドを実行できます。それは素晴らしい作品です。
間違ったメッセージに直接コメントすることはできませんが、/ XNおよび/ XOオプションの定義は前のメッセージで投稿されたものと比較して逆になっていることを全員に警告させてください。
[古い/新しいファイルを除外]オプションは、RoboCopyのログに表示される情報と一致しています。RoboCopyはSOURCEを反復処理し、SOURCEの各ファイルが宛先のファイルより「古い」または「新しい」かどうかを報告します。
その結果、/ XOは、ここで主張された「ソースより古い」ではなく、(直感的な)古いソースファイルを除外します。
新しいソースファイルまたは変更されたソースファイルのみをコピーするが、最新の宛先ファイルを置き換えないようにする場合は、/ XOを使用するのが適切なオプションです。
これは私のために働いたものです。これを使用して、上書きせずにファイルを他のドライブに「追加」します。
バッチファイル:robocopy-missingfiles.bat
@echo off
echo Copying
echo "%1"
echo to "%2"
echo.
echo Press Cntr+C to abort
Pause
echo.
@echo on
robocopy %1 %2 /Xo /XN /XC /J /SL /S /MT:8 /R:1 /W:1 /V /DCOPY:DAT /ETA /COPY:DATO /FFT /A-:SH /XD $RECYCLE.BIN "System Volume Information"
例:
robocopy-missingfiles.bat f:\Working-folder\ E:\Backup-folder\
実装前にテストを行います。
簡単な方法は、/ MIRオプションを使用して、2つのディレクトリをミラーリングすることです。基本的に、新しいファイルのみをコピー先にコピーします。次のコマンドでは、ソースと宛先をフォルダーへのパスに置き換え、スクリプトは拡張子を持つファイルを検索します。
robocopy <source directory> <destination directory> *.* /MIR