为什么 robocopy 仍然复制一个由 Windows 中的 txt 编辑器打开的文件
进一步回答上述问题,如何以最简单的方式保持文件在裸 Windows 环境(如服务器 2016 环境)中打开,以显示 robocopy 属性,从而避免复制打开的文件,甚至为了测试目的在日志中显示错误?
无论是通过批处理还是 Windows 服务器中现有的其他功能都可以接受
VBS 之类的东西不起作用
设置 MyFile = fso.OpenTextFile(FileName, ForWriting, True)
执行 MyFile.WriteLine “Hello world!”循环
答案1
复制自为什么 robocopy 仍然复制一个由 Windows 中的 txt 编辑器打开的文件
Windows 从 MS-DOS 继承了“共享模式”的概念,将其作为文件锁定的一种简单形式。打开文件时,您可以选择将其共享为读/写、仅供读取或根本不共享。某些脚本解释器将始终使用“共享全部”。
但是,您可以使用任何 .NET 运行时语言和 4 参数系统.IO.文件.打开()函数。您的 Windows 系统很可能在某处隐藏了 C# 编译器 (csc.exe),但现在在 PowerShell 中执行相同操作更加容易:
$fh = [System.IO.File]::Open($path,
[System.IO.FileMode]::Open,
[System.IO.FileAccess]::Read,
[System.IO.FileShare]::None)
第四个参数可以是任意的System.IO.FileShare 枚举值,例如:
[System.IO.FileShare]::None
– 不分享任何内容[System.IO.FileShare]::Read
– 共享读取(阻止写入/删除)[System.IO.FileShare]::ReadWrite
– 共享读/写(阻止删除)
完成后:
$fh.Close()