从版本 9.3 开始,可以将命令行的输出导入到表中。 我正在使用窗口,我想在(临时(表中导入
wmic logicaldisk get size, freespace, caption
Caption FreeSpace Size
C: 7454072832 118087389184
D: 151787872256 484033048576
E:
F: 110551040 625094656
G: 136850108416 481803997184
V: 272621289472 990730260480
X: 272621289472 990730260480
Y: 272621289472 990730260480
我尝试了查询
CREATE TABLE IF NOT EXISTS _disks(row text);
TRUNCATE TABLE _disks;
COPY _disks FROM PROGRAM 'wmic logicaldisk get size, freespace, caption' ESCAPE '\' CSV;
SELECT * FROM _disks;
ERROR: COPY escape must be a single one-byte character
然后我试了
COPY _disks FROM PROGRAM 'wmic logicaldisk get size, freespace, caption' ESCAPE '' CSV;
ERROR: unquoted newline found in data
另一方面
COPY _disks FROM PROGRAM 'wmic logicaldisk get size, freespace, caption';
ERROR: unquoted newline found in data
我尝试了其他不同的解决方案,但我被卡住了。
有什么建议吗?
编辑:
也许这样的事情可以让我接近,但还不够
COPY _disks FROM PROGRAM 'for /f "tokens=*" %F in (''wmic logicaldisk get size^, freespace^, caption'') do @echo %F';
我认为有一种方法可以修改 EOL,并且可能会通过这种模式,但我错过了一些东西......
您必须声明字符串值需要通过在它前面添加E
来转义。在您的情况下,如果您只传递'\'
它将被解释为两个字符,这在此函数中是不允许的。看看这个:
SELECT E'\', '\';
?column? | ?column?
----------+----------
| \
(1 Zeile)
这是一种获取 CSV 文件的方法。有一些方法可以写入数据库,但我认为有很多方法可以导入已经众所周知的 CSV 文件。
Get-CimInstance -ClassName CIM_LogicalDisk |
Select-Object -Property DeviceID,FreeSpace,Size |
ConvertTo-Csv -NoTypeInformation -Delimiter ',' |
Out-File -FilePath 'ld.txt' -Encoding ascii
这可以在 cmd.exe .bat 文件脚本中使用。
powershell -NoLogo -NoProfile -Command ^
"Get-CimInstance -ClassName CIM_LogicalDisk |" ^
"Select-Object -Property DeviceID,FreeSpace,Size |" ^
"ConvertTo-Csv -NoTypeInformation -Delimiter ',' |" ^
"Out-File -FilePath 'ld.txt' -Encoding ascii"