【问题标题】:Renaming Files Using XP_CMDSHELL?使用 XP_CMDSHELL 重命名文件?
【发布时间】:2015-12-16 00:09:06
【问题描述】:

The output Screenshot我有一个脚本,它遍历 SQL Server 数据库表以确定文件类型,然后重命名网络共享上的文件以添加适当的扩展名。脚本如下:

DECLARE @UNC AS varchar(255), @Filetype AS varchar(255), @CMD AS VARCHAR(255)


declare @HPF_Test as cursor;

SET @HPF_Test = CURSOR FOR


    select UNC, Filetype
    from HPF_Test;


OPEN @HPF_Test;
    Fetch NEXT from @HPF_Test into @UNC, @Filetype;
    While @@fetch_status=0
        begin 
            SELECT @CMD = 'REN ' + @UNC + ' '
 + RIGHT(@UNC, CHARINDEX('\', REVERSE(@UNC)) - 1)
 + case when @Filetype = 'TIF' THEN '.TIF' when @Filetype = 'TXT' THEN '.TXT' when @Filetype = 'XML' THEN '.XML' END 
 FROM HPF_Test 
           exec master..xp_cmdshell @CMD
            Fetch next from @HPF_Test into @UNC, @Filetype
        end

close @HPF_Test;
deallocate @HPF_Test;

由于大约有 9200 万张图像需要重命名,因此整个过程的运行和完成需要时间。因此,我有以下几个问题:

1) 可以在脚本中添加什么来测试是否所有文件都被复制了?

2) 有人建议我们批量运行脚本。我怎样才能把它分成批次?

请在这方面帮助我。我是这方面的新手。

谢谢!

更新:

我有三个要测试此代码的文件。所以,当我运行上面的代码时,我得到三个输出,它们都是 NULL。但是,当我尝试在表中捕获结果时,我得到两条记录 1) 系统找不到指定的文件 & 2)NULL

我正在使用将下面的脚本添加到原始脚本中以将结果捕获到表格中。

CREATE TABLE #TEMP_test3(t nvarchar(255))

 insert  #TEMP_test3(t)

exec master..xp_cmdshell @CMD

 select * from

 #TEMP_test3

谁能在这方面帮助我,或者至少告诉我我在这里做错了什么?

谢谢!!!

【问题讨论】:

  • exec master..xp_cmdshell 将运算结果返回到nvarchar(255) 列。您可以检查返回的内容并将其写入表中。例如。如果您尝试重命名不存在的文件,REN 命令将显示:The system cannot find the file specified.
  • 如果命令在某些时候由于某种原因失败了,比如说在重命名了 4200 万个文件之后,那么我将如何找出它失败的地方?随后如何从那时起重新运行命令重命名文件?
  • 我建议您在 HPF_Test 表中添加一个名为 result 的列。只需将 xp_cmdshell 命令的结果写入此列即可。然后,您可以对该列运行查询以查看哪个失败
  • 您能告诉我该怎么做吗?至于我需要在现有代码中添加什么以及在哪里添加?

标签: sql sql-server-2008 file-rename xp-cmdshell


【解决方案1】:

如果您要对要重命名的每个文件使用单独的命令 shell 调用,这可能会由于持续的上下文切换而持续很久。从(python/vb/shell/etc)脚本开始并改为使用反向角度会更快。

脚本将从数据库中读取文件列表,尝试重命名它们,跟踪成功或失败,然后将结果写回数据库。我猜这个过程会在 1/100 的时间内完成。

【讨论】:

  • 卡希特,你是对的。我们只是做了数学计算,似乎需要大约。重命名所有 9200 万个文件需要 60 天。
猜你喜欢
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2012-06-20
  • 2013-08-24
  • 2016-01-18
  • 2022-11-25
  • 2016-06-08
  • 2021-02-13
相关资源
最近更新 更多