1

注:バッチを使用する必要はありませんが、私はバッチに精通しているだけです。Powershellの方が想像しやすいので、Powershellでこの問題のより簡単な解決策がある場合は、叫んでください。

すべてのクライアントのDRバックアップをテストするという骨の折れる作業があります。つまり、ShadowProtectスナップショットを最新のインクリメンタルにマウントし、ファイルの書き込みと読み取りを行い、イメージをアンマウントします。バッチの実際のShadowProtect部分はかなり単純ですが、これを自動化できるバッチを設計したいと思います。

基本的に私の質問は:

バッチファイルで、最初にフォルダー内のファイルを列挙してから、指定されたファイル名の特定の部分を変数に配置するにはどうすればよいですか?

ShadowProtectインクリメンタルである理由には、次のような命名規則があります。

SERVERNAME_DRIVELETTER_b00X_i000x           - whereby b = base image, i = incremental number

最新のインクリメンタルイメージをマウントする必要があるためi、ファイル名のに続く番号に基づいて、フォルダーを解析し、最新のインクリメンタルイメージを見つける必要があります。

これはバッチで可能ですか?

ありがとう!

4

2 に答える 2

1

このようなものが機能するはずです:

@echo off

setlocal EnableDelayedExpansion

for /f "delims=_ tokens=1-4" %%f in ('dir /b *_*_*_*') do (
  set servername=%%f
  set driveletter=%%g
  set base_image=%%h
  set increment=%%i
)

echo !servername!
echo !driveletter!
echo !base_image!
echo !increment!

endlocal

一致するファイルが複数あり、それらすべてで何かを実行したい場合は、処理コードをループ内に配置する必要があります。

編集:

  • for /f:ファイルまたは一重引用符で囲まれたコマンドの出力のいずれかを処理します
  • delims=_:処理されたコンテンツのフィールドはアンダースコアで区切られます
  • tokens=1-4:最初の4つのトークンをパラメーターに割り当てます%%f%%i最初のパラメーターはforステートメントで指定されたものです)
  • dir /b *_*_*_*:名前にファイル名だけで少なくとも3つのアンダースコアが含まれているすべてのファイルを一覧表示します(このコマンドの出力はforループによって処理されます)
  • setlocal EnableDelayedExpansion:実行時に変数を展開します(そうでない場合、変数へのパラメーターの割り当ては機能しません)

詳細についてはhelp for、およびを参照してくださいhelp dir

于 2012-11-15T20:39:13.587 に答える
0

いつでもvbscriptまたはjscriptを使用できます。バッチファイルよりもはるかに強力です。また、jscriptおよびvbscriptホストは、PowerShellを備えていないマシンでも使用できます。

列挙用のリンク: http ://www.techimo.com/forum/webmastering-programming/100453-recursive-javascript-list-all-files-folders-given-folder.html

Jscript文字列リファレンス: http ://msdn.microsoft.com/en-us/library/bxsyt3yc(v = vs.80).aspx

2つを組み合わせることができるはずです。

jscriptを実行します(javascriptに似ているため、vbscriptよりもjscriptの方が好きです)

cscriptスクリプト名

于 2012-11-15T19:36:07.837 に答える