我有以下脚本将文件夹(文件夹中的所有文件)压缩为zip文件:
set-content $zipFileName ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
$ZipFile = (new-object -com shell.application).NameSpace($zipFileName)
Get-ChildItem $folder | foreach {$zipFile.CopyHere($_.fullname)}
Run Code Online (Sandbox Code Playgroud)
其中$ folder ="C:\ Test",$ zipFileName ="C:\ data\test.zip"为例
如果"C:\ Test"不包含空的子文件夹,它可以正常工作,并且它似乎递归地压缩子文件夹中的所有文件.我真的很喜欢上面简单的线条脚本.例如:
C:\Test
file1.dat
file2.dat
Test-Sub
File21.bat
....
Run Code Online (Sandbox Code Playgroud)
但是,我在一个案例中得到了错误.我发现如果有任何空文件夹,例如"C:\ Test\EmptySub",
C:\Test
file1.dat
file2.dat
Test-Sub
File21.bat
....
EmptySub
AnotherSub
file31.sp1
...
Run Code Online (Sandbox Code Playgroud)
该脚本将生成错误.我尝试了以下脚本:
Get-ChildItem $files -Recurse | foreach { if (!$_.PSIsContainer)
{$zipFile.CopyHere($_.fullname)}}
Run Code Online (Sandbox Code Playgroud)
这不能按预期工作.它只是跳过所有子文件夹.不确定是否有可用的跳过所有空子文件夹的过滤器或子句?
更新:根据建议,我试了一下.我的问题还没有解决.这是我的问题的更新.首先,我更新了上面的脚本,以显示如何创建$ zipFile对象.其次,我有建议的代码:
Get-ChildItem $files | ? {-not ($_.PSIsContainer -eq $True -and
$_.GetFiles().Count -eq 0) } | % {$zipfile.CopyHere($_.fullname)}
Run Code Online (Sandbox Code Playgroud)
我在我的WindowsXP上尝试了以上更新,它可以正常使用空子文件夹.但是,相同的代码在Windows …
有没有办法使用存储过程映射到网络驱动器?我试过了:
xp_cmdshell 'net use Q: [shared_network_drive] [pwd] /user:[username]'
Run Code Online (Sandbox Code Playgroud)
但是我得到了一个错误的说法
'System error 1312 has occurred.'
'A specified logon session does not exist. It may already have been terminated.'
Run Code Online (Sandbox Code Playgroud)
但是,当我在与SQL Server计算机相同的框中的cmd控制台中运行相同的命令时,根本没有问题.看起来SQL进程确实传递了正确的登录凭据信息.有什么方法可以通过SQL SP来实现吗?
我在SQL Server 2005(Management Studio IDE)中使用以下T-SQL查询:
DECLARE @id int;
DECLARE @countVal int;
DECLARE @sql nvarchar(max);
SET @id = 1000;
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = @id';
EXEC (@sql) AT oracleServer -- oracleServer is a lined server to Oracle
Run Code Online (Sandbox Code Playgroud)
我不知道如何将输入参数@id传递给EXEC查询,并将计数结果传递给@countVal.我看到了一些Microsoft SQL服务器的例子:
EXEC (@sql, @id = @id)
Run Code Online (Sandbox Code Playgroud)
我为Oracle尝试了这个,但是我收到了一条语句错误:
OLE DB provider "OraOLEDB.Oracle" for linked server "oracleServer"
returned message "ORA-00936: missing expression"
Run Code Online (Sandbox Code Playgroud) 如果我有一个示例函数...
function foo()
{
# get a list of files matched pattern and timestamp
$fs = Get-Item -Path "C:\Temp\*.txt"
| Where-Object {$_.lastwritetime -gt "11/01/2009"}
if ( $fs -ne $null ) # $fs may be empty, check it first
{
foreach ($o in $fs)
{
# new bak file
$fBack = "C:\Temp\test\" + $o.Name + ".bak"
# Exception here Get-Item! See following msg
# Exception thrown only Get-Item cannot find any files this time.
# If there is any matched file …
Run Code Online (Sandbox Code Playgroud) 我使用File.Copy(source,dest,true)使用覆盖选项将文件从本地复制到远程.在我的例子中,dest是一个映射的网络驱动器:
File.Copy(source, dest, true);
UnMapDrive(); // unmap the network drive
Run Code Online (Sandbox Code Playgroud)
我之后遇到的问题是源文件可能被锁定,因此我无法从本地删除该文件.
我想这可能是由File.Copy()调用引起的.不确定这个是否是同步过程.换句话说,调用后是否发布了源文件?
我有几个列的数组值$ outData.我不确定我如何对齐某些列?
$outData | Select-Object `
Name `
@{Name="Freespace(byte)"; Expression={"{0:N0}" -f $_.FreeSpace}}, '
.... # other colums `
| Format-Table -AutoSize
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,当我尝试将freespace列的align用于右侧时:
@{Name="Freespace(byte)"; Expression={"{0:N0}" -f $_.FreeSpace}; align="right"}, '
Run Code Online (Sandbox Code Playgroud)
我收到错误消息"不支持指定的方法".不确定是否有任何方法可以将值对齐?
我有一个以下静态div:
<body>
<div id="div1"></div>
....
Run Code Online (Sandbox Code Playgroud)
我想通过使用dojo在div1中动态添加id为"div1_1"的div.我该怎么做?
我有一个xml字符串,在一行中很长.我想以一种漂亮的缩进格式将xml字符串保存到文本文件中:
<root><app>myApp</app><logFile>myApp.log</logFile><SQLdb><connection>...</connection>...</root>
Run Code Online (Sandbox Code Playgroud)
我喜欢的格式:
<root>
<app>myApp</app>
<logFile>myApp.log</logFile>
<SQLdb>
<connection>...</connection>
....
</SQLdb>
</root>
Run Code Online (Sandbox Code Playgroud)
什么是可用于C#的.Net库?
我有一个批处理文件test.bat来启动一个PowerShell脚本:
@pushd "C:\myscripts"
powershell .\test.ps1 arg1 "arg2 with space" arg3
@popd
Run Code Online (Sandbox Code Playgroud)
脚本test.ps1(位于C:\ myscripts)是一个非常简单的脚本:
# just print out the arguments
Write-Output ("args count: {0}" -f $args.length)
$args
Run Code Online (Sandbox Code Playgroud)
然后我尝试启动test.bat.我应该将三个参数传递给ps1,但我得到以下结果:
args count:5 arg1 arg2,空格arg3
我在脚本中的预期,args [0]应该是arg1和args [1]应该是"arg2 with space"而args3 [2]应该是arg3.我无法理解为什么脚本实际上得到5个参数.
如何将cmd或batch中的参数传递给powershell,就像我预期的那样?像这样:
args count: 3
arg1
arg2 with space
arg3
Run Code Online (Sandbox Code Playgroud) 在LINQPad的左下角,有一个用于显示查询的区域。一个选项卡是“我的查询”,另一个选项卡是“样本”。我找不到像“我的查询”中那样添加多个文件夹的方法,就像“样本”选项卡中那样。我尝试右键单击并检查了所有菜单项。
我不确定是否可以更改XML设置以在“我的查询”中包括多个文件夹来组织代码。
我如何在LINQPad中具有多个查询文件夹?
powershell ×4
.net ×2
c# ×2
dojo ×1
javascript ×1
linqpad ×1
ora-00936 ×1
oracle ×1
sql ×1
sql-server ×1
xml ×1