我正在使用Powershell v3.0对文件执行不同的操作,而且这种情况让我感到困惑。
我有2个文件夹:
C:\ TMP1
C:\ TMP2
在文件夹C:\ Tmp1中,我有一个文件MyFile1.csv。我用Notepad ++手动打开这个文件,点击Enter,点击退格,保存文件。一切都很好。
我运行以下脚本,将原始文件的副本从Tmp1复制到Tmp2:
set-location -Path C:\Tmp1
$FileOld = (Get-Location).Path + "\MyFile1.csv"
set-location -Path C:\Tmp2
$FileNew = (Get-Location).Path + "\MyFile1.csv"
[System.IO.File]::Copy($FileOld, $FileNew)
[System.IO.File]::Close
然后我使用notepad ++,Enter,Backspace,Save打开C:\ Tmp2 \ MyFile1.csv,我收到一条消息告诉我确保该文件没有用其他程序打开。因此我无法修改此文件的副本,因为我无法保存它。即使在关闭PowerShell之后我也尝试过。但我可以删除该文件。
现在,如果我使用以下脚本将原始文件复制到同一原始文件夹中的其他文件中:
set-location -Path C:\Tmp1
$FileOld = (Get-Location).Path + "\MyFile1.csv"
$FileNew = (Get-Location).Path + "\MyFile2.csv"
[System.IO.File]::Copy($FileOld, $FileNew)
[System.IO.File]::Close
然后我可以用Notepad ++,Enter,Backspace,Save编辑MyFile2.csv,它可以保存文件。
为什么我不能使用[System.Io.File] :: Copy复制和编辑从一个文件夹复制到另一个文件夹的文件?
我如何解决此问题,因为我不想操纵原始文件夹中的原始文件?
编辑:我尝试过使用powershell命令Copy-Item $ FileOld $ FileNew,我遇到了同样的问题。所以它没有链接到[System.IO.File] :: Copy方法。但我的问题仍然存在。
编辑2 :我通过运行以下脚本找到了解决方法:
set-location -Path C:\Tmp1
$FileOld = (Get-Location).Path + "\MyFile1.csv"
$FileNew = (Get-Location).Path + "\MyFile2.csv"
Copy-Item $FileOld $FileNew
set-location -Path C:\Tmp2
$FileAgn = (Get-Location).Path + "\MyFile1.csv"
Move-Item $FileNew $FileAgn
使用此脚本,我可以使用Notepad ++,Enter,Backspace,Save打开,没有任何问题。
任何类型的副本到另一个文件夹似乎都不会释放新复制的文件。
答案 0 :(得分:1)
听起来很像权限问题(可能由Copy-Item
复制而不是::Copy
或类似的东西) - 因为一旦ISE关闭,文件就无法打开。 powershell流程无法在文件关闭后保持打开状态(除了某些情况 - 见下文),所以我怀疑这是实际问题。
此外,我在上一份工作中管理过一次,创建了一个文件夹,我没有任何编辑文件的权限,但我可以自由删除它们 - 这听起来和你的情况完全一样。
File::OpenWrite
并查看您获得的异常 - 这将比Notepad ++提供的更详细