查询数据库的值,在批处理脚本中设置为变量,并使用变量在网络驱动器上查找特定文件

时间:2016-05-05 15:08:53

标签: windows batch-file cmd

对此有点新意,并希望有人可以提供帮助。我有以下批处理脚本查询数据库,拉回结果并将其设置为变量。

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”

我正在搞乱这个:

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"

但是这没用。

我可以尝试的方式实现吗?如果不是我怎么办呢?

感谢任何帮助/指导

亲切的问候

1 个答案:

答案 0 :(得分: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"

当我运行第一个(更改路径名以匹配我的环境)时,它返回如下内容:

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

但是,当我运行第二个时,结果如下所示:

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

注意,第二个语句的输出中没有冒号(:)到find

要解决此问题并使用较短的陈述,您可以使用dir /b /s代替。

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