2

Psexec を使用してリモート バッチ ファイルを実行しています。入力を psexec に渡し、入力としてファイル名を検索するリモート バッチ ファイルにリダイレクトします。ただし、リダイレクト中、ファイル名は @##&#* のようにガベージになります。これは、実際のファイル名がユーザーが指定したバッチ ファイルに渡されないことを意味します。この理由が何であるかを誰でも知ることができます。

pause
cd c:
set /P INPUT=Type input: %=%
echo Your input was: %INPUT%
copy %INPUT% \\remotemachineip\C$ && c:\psexec \\machineip cmd /k "c:\batchfile.bat arg1 < %INPUT% & del %INPUT%"  -e -c -f -i
pause
4

1 に答える 1

1
pause
cd c:
set /P INPUT=Type input: %=%
echo Your input was: %INPUT%

copy %INPUT% \\remotemachineip\C$ && c:\psexec \\machineip cmd /k c:\batchfile.bat %INPUT% & del %INPUT%  -c -f -i
pause

ローカル マシン上の上記のバッチ ファイル コマンドからの入力を求めるリモート バッチ ファイル。そのため、%1 (コマンドの下) は、ユーザーが入力した %INPUT% (上記のコード コンテンツの cmd.exe の 2 番目の引数) に置き換えられ、sqlcmd コマンドが実行されます。したがって、ユーザーが上記のバッチ ファイルで渡す入力は、以下のバッチ ファイル (内容) に正常にリダイレクトされ、その中のコマンド (以下の sqlcmd) が正常に実行されます。

SQLCMD  -Sservername -d(databasename) -iC:LINKEDSERVER.sql -v filename="%1"

たとえば、%INPUT% をc:\inputfile.xlsとして指定すると、%1 の代わりに SQLCMD コマンドにリダイレクトされるため、次のように実行されます--

SQLCMD  -Sservername -d(databasename) -iC:LINKEDSERVER.sql -v filename="c:\inputfile.xls"
于 2011-11-22T15:50:20.770 に答える