パス全体がわからない場合にファイルをディレクトリにコピーする

パス全体がわからない場合にファイルをディレクトリにコピーする

開くといくつかのファイルを含むディレクトリを生成するアプリケーションがあります。このディレクトリ内のいくつかのファイルにアクセスしてエクスポートし、このディレクトリにインポートしたいと思います。ディレクトリ構造は次のようになります。

+ Folder I know
   + Auto Generated Folder         'Name changes every time
      -SomeFile
      -SomeFile2
      +macro
         -macro1
         -macro2
         -macro3

私は「macro」サブディレクトリの下のファイルだけを操作したいです。私は「知っているフォルダ」を見て一致させる「for」コマンドを使ったエクスポートソリューションを持っています:

 for /R "C:\Folder I know\" %f in ("macro*") do @xcopy "%f" "destination path" /u /y

xcopy コマンドの /u スイッチを使用すると、コピー先に既に存在するファイルのみを更新できます。ここでの疑問は、同じことを逆に行うにはどうすればよいかということです。フォルダー (たとえば c:\temp) からファイルをコピーし、マクロ フォルダーに既に存在する場合にのみ、そのファイルを更新したいのです。

答え1

何をしようとしているのか正確にはわかりませんが、%CD%環境変数が役に立つようです。この変数は、ドライブ文字とフルパスを含む現在の作業ディレクトリを追跡します。これが動作中のスクリーンショットです。

ここに画像の説明を入力してください

その変数を知っていれば、スクリプト内でその変数を必要に応じて使用できます。あなたの特定のケースでは、スクリプトが生成されるたびにそれをマクロ フォルダーにコピーし、そこから実行する必要があるようです。

外部で機能するスクリプトを作成する唯一の方法は、プログラムが 1 つのフォルダー名を自動生成するために作成する変数を取得できることです。または、自動生成されたフォルダー名がパターンに一致できる何らかの規則に従っている場合は、IF ステートメント、正規表現、および文字列コマンドを含むいくつかのオプションが機能する可能性があります。

答え2

さらに考え、テストした結果、解決策を見つけました。

FOR /R "C:\Folder I know\" %f IN ("*") DO @xcopy "network path\%~nf" "%~pf" /e /u /y

for コマンドは、依然として、私が知っているフォルダ内の各ファイルのみを参照します。これには、私が知らないサブディレクトリも含まれます。次に、ファイルがバックアップされているネットワーク パスを使用して xcopy を実行します。最後に追加された は、 for コマンドから現在のファイルのファイル名を取得します。次に、 for コマンドから現在のファイルのパスを取得する%~nfを使用して、それをローカル フォルダにコピーします。%~pf

関連情報