2016-05-05 4 views
0

これは新しいもので、誰かが助けてくれることを願っています。私はデータベースを照会し、結果を引き出し、変数に設定する次のバッチスクリプトを用意しています。バッチスクリプトで変数として設定し、変数を使用してネットワークドライブ上の特定のファイルを検索する値のクエリデータベース

set "sqlcmdServer=sqlinstance" 
for /f %%A in (
'sqlcmd -h -1 -r 1 -Q "SET NOCOUNT ON; Declare @v varchar(100) set @v = (select idcorrent from database.dbo.table (nolock) where [identity] = 'UK' and idletter = 'EX' and stcorres = 14) Select @v"' 
) do set "var=%%A" 

echo %var% 
pause 

これは非常にうまく文字列を返します。私がしたいのは、この変数を含むこの変数を使用して、この変数を含む単一のファイル(pdfファイル)をネットワークドライブ上のフォルダで検索することです。ファイル名は、常に私はこれをいじりた変数すなわち「somecharacters_variable.pdf」

で終了します:テスト、成功した私のテストファイルを見つけ、1つのデスクトップフォルダからそれを移動し、

for /f "delims=" %%s in ('xcopy /l /e /y "C:\Users\USERNAME\Desktop\test1\*.pdf"r "C:\Users\USERNAME\Desktop\test2" ^|find ":"') do copy "%%s" "C:\Users\USERNAME\Desktop\test2" 

別のだから私は、私のバッチスクリプトの末尾に追加するSETLOCAL enabledelayedexpansionを使用して、ネットワークドライブをデスクトップディレクトリを交換して、そのような(この質問の目的のために変更されたネットワークドライブ名)として変数を挿入しようとした:

set "sqlcmdServer=sqlinstance" 
setlocal enabledelayedexpansion 
for /f %%A in (
'sqlcmd -h -1 -r 1 -Q "SET NOCOUNT ON; Declare @v varchar(100) set @v = (select idcorrent from database.dbo.table (nolock) where [identity] = 'UK' and idletter = 'EX' and stcorres = 14) Select @v"' 
) do set "var=%%A" 

echo !var! 
for /f "delims=" %%s in ('xcopy /l /e /y "\\networkdrive\test\test\*!var!.pdf"r "C:\Users\USERNAME\Desktop\test2" ^|find ":"') do copy "%%s" "C:\Users\USERNAME\Desktop\test2" 

しかし、これはうまくいかなかった。

私が試している方法で達成可能ですか?もし私がそれについてどうやって行くのですか?

すべてのヘルプ/案内が高く評価され

種類は

+0

は、私は... – aschipfl

+0

が意図しないで推測 'xcopy'ソースに追加' r'、ある「しかし、これは動作しませんでした。」どのように動作しませんでしたか?エラーメッセージはありましたか?何が起こったのですか? – lit

+0

@aschipfl whoops! rはそこにあることを意図していません!どうやってそれを見つけられなかったのか分かりませんが、ありがとうございます。そのスクリプトなしで私のスクリプト全体を再テストしただけで、うまく動作します!デスクトップフォルダーからデスクトップフォルダーの検索/コピーを実行する場合に限ります。 – Nighthawkz

答えて

0

に関しては、私はこの問題は、この違いにあると思う:

xcopy /l /e /y C:\Users\USERNAME\Desktop\test1\*.pdf" "C:\Users\USERNAME\Desktop\test2 

と、この:

xcopy /l /e /y "\\networkdrive\test\test\*!var!.pdf" "C:\Users\USERNAME\Desktop\test2" 

ときI最初のものを実行する(私の環境に合うようにパス名を変更して)何かを返すこのようなグラム:

C:file1.pdf 
C:SubFolderName\file2.pdf 
C:AnotherSubFolder\AndSoOn.pdf 

しかし、私は2番目1を実行すると、結果は次のようになります。

\\networkdrive\test\test\file1.pdf 
\\networkdrive\test\test\subfolder\file2.pdf 
\\networkdrive\test\test\anotherSubFolder\AndSoOn.pdf 

注意、findへのコロン(:)が第2の出力ではありませんステートメント。

これを回避し、短い文を使用するには、代わりにdir /b /sを使用します。

for /f "delims=" %%s in ('dir /b /s "*%var%.pdf"') do (
    copy "%%s" "C:\Users\USERNAME\Desktop\test2" 
) 
+0

ありがとうございました!残念ながらこれを試してみると、変数文字列を含む特定のファイルだけでなく、ネットワークドライブ上のターゲットフォルダの内容全体をコピーし始めました。まだスクリプトの最初の部分から変数を渡していないようです。私はまた、ネットワークドライブを文字(W :)にマップし、オフチャンスでオリジナルを再試行しました。それはまだハングアップしています:( – Nighthawkz

+0

私の応答を再読し、私のスクリプトを見て - 私は私のスクリプトで間違った文字ドライブを入力したことを実感 - 私は再試行し、それは働いた!ついに終わりました。 – Nighthawkz

関連する問題