首页 文章

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

提问于
浏览
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”

我正在弄乱这个:

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

    我认为问题在于这个区别:

    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"
    )
    

相关问题