2

ゲームにかなり慣れていないため、ヘルプと例を探すのに何時間も費やしました。単一の入力ファイル「computer_listc.txt」を使用してプロセスを合理化したいのですが、これが機能するバージョンがありました。私は基本的に一連のフォルダー パス (computer_listc.txt から) を読み取り、パスの一部を使用してさらに cmd 式を記述したいと考えています。

私の問題は、fname と comp_id が正しく設定されていないことです。それらを T (ファイル名) と等しくしてから編集したいと考えています。

fname は、最初の 12 文字を削除したファイルパスである必要があります。comp_id は、ファイルパスで指定されたコンピュータ名と同じである必要があります。

fname = c_modelling\model\slave1
comp_id = VOSTRO460-1

スクリプトはこちら。私のエラーを見ることができますか??

for /f "usebackq tokens=*" %%T in ("C:\c_modelling\Model\cal21_cal\Computer_ListC.TXT") do (
set fname = %%T
ren fname "%fname%" "C:\%fname%:~12%"
set comp_id = %%T
%comp_id% = %{comp_id:0:12} 
mkdir %%T > NUL 2>&1
echo cd %fname% >\\%%T\beo_insC.cmd
echo beo >>\\%%T\beo_insC.cmd
robocopy c:\c_modelling\model\cal21_cal \\%%T\ /s /e
start cmd.exe /c psexec \\%comp_id% -c c:\c_modelling\model\cal21_cal\beo_insC.cmd
del \\%%T\beo_insC.cmd
)

Computer_ListC.txt には、次のファイル名が含まれています。これには、最終的にコンピュータ フォルダ パスの長いリストが含まれます。

VOSTRO460-1\c_modelling\model\slave1
VOSTRO460-1\c_modelling\model\slave2

'psexec' で使用する *.cmd ファイルを作成しています。プロセスをローカル コンピューターに転送すると、パスのデフォルトは \system32 になります。

どんな援助も非常に役に立ちます!!

4

1 に答える 1

4

最初の問題は、文字列SETステートメントのスペースが重要であることです。変数名と割り当てられた値の両方にスペースが含まれるため、-ではなくset fname = %%Tという名前の変数が設定され、その値には の値の前に先頭のスペースが含まれます。"fname ""fname"%%T

次は永続的な遅延拡大の問題です。block(括弧で囲まれたステートメントのシーケンス) 内では、ループの実行が開始される前に、 PARSE%var%時にその値に置き換えられます。

RUN-TIME値にアクセスするには、SETLOCAL ENABLEDELAYEDEXPANSIONステートメントを実行する必要があり、 whiledelayedexpansionが呼び出されると、 RUN -time 変数値に!var!アクセスします。

ただしdelayedexpansion、ループ内で単純に呼び出すことはできないことに注意してください。一度に開くことができる数には制限があるため、ENDLOCALコマンドで「ブラケットを閉じる」必要があります (論理的な End-Of-File に到達することは と同等ですENDLOCAL)。欠点はENDLOCAL、環境をマッチングSETLOCALが呼び出されたときの値。このため、SETLOCAL ENABLEDELAYEDEXPANSION通常はバッチの開始時に実行されます。@echo off

次号は

ren fname "%fname%" "C:\%fname%:~12%"

rename コマンドの構文は次のとおりですren sourcename newname- 正確に 2 つの引数、スペースを含む引数を囲みます"rabbit's ears"さらに、宛先名は名前のみであり、パスではありません。

次に、これがあります:

%comp_id% = %{comp_id:0:12} 

変数名のスペースを削除するようにこれを修正しcomp_id、値が割り当てられており、 のRUN時間値をfred扱っていることに気付いたと仮定すると、これは次のように表示されます。comp_id

!comp_id!=%{comp_id:0:12} 

どのバッチが次のように解釈するか

fred=%{comp_id:0:12} 

そしてすぐにあきらめます。

あなたがおそらく期待していることは

set comp_id=!comp_id:~0,12! 

つまり、文字の最初の文字 ( )から、comp_idcomp_idRUN時の値に設定されます。012

于 2013-07-23T01:54:24.923 に答える