【发布时间】:2021-08-01 08:58:07
【问题描述】:
我在从命令行和脚本中调用以下 PowerShell 命令时遇到困难:
Invoke-Sqlcmd -HostName **HOST** -Database **DATABASE**
-Username **USER** -Password **PWD** -Query "TRUNCATE **THE_TABLE**
BULK INSERT **THE_TABLE** FROM 'D:\Folder\csvfiles\import.csv'
WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n',TABLOCK)"
-ServerInstance "tcp:**HOST**"
我已将 CSV 文件复制到父文件夹,然后复制到根目录。每次,命令都会失败并出现以下错误:
Invoke-Sqlcmd:无法批量加载。文件“D:\Folder\csvfiles\import.csv”不存在。
在 line:1 char:1
这是任务计划程序每小时运行的脚本的一部分。通常它会运行得很好。今天它出错的频率越来越高。
我被难住了。为什么它找不到明显存在的文件?我是否忽略了什么?
【问题讨论】:
-
我建议你添加一些目录转储命令来证明它的存在。即将此行添加到您的脚本中:
ls D:\Folder\csvfiles然后您可以确定脚本实际上可以看到文件和文件夹 -
您不会从 excel 中打开/生成此 CSV 吗?因为如果您保持打开文件,excel通常会锁定文件
-
文件肯定在那里。脚本的另一部分(不是 PS)创建它。该文件未在 Excel 中打开。它在没有安装 Office 的服务器上运行。更奇怪的是,我将 csv 文件从服务器复制到我的工作站,然后再次运行 cmdlet。这一次,错误更具描述性:Invoke-Sqlcmd:无法批量加载,因为无法打开文件“C:\Users\xxxxx\Documents\WindowsPowerShell\Scripts\import.csv”。操作系统错误码3(系统找不到指定的路径)。
-
所以你的
ls命令显示了文件?这将帮助您排除一个简单的错误。 -
因为当一些显而易见的事情不起作用时,最好的办法是通过查看脚本的真实情况来确认一些假设。
标签: powershell