![如何在没有 C 语言等程序帮助的情况下,仅使用 Windows 的基本功能简单地保持文件处于打开状态?](https://linux22.com/image/1571169/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%20C%20%E8%AF%AD%E8%A8%80%E7%AD%89%E7%A8%8B%E5%BA%8F%E5%B8%AE%E5%8A%A9%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E4%BB%85%E4%BD%BF%E7%94%A8%20Windows%20%E7%9A%84%E5%9F%BA%E6%9C%AC%E5%8A%9F%E8%83%BD%E7%AE%80%E5%8D%95%E5%9C%B0%E4%BF%9D%E6%8C%81%E6%96%87%E4%BB%B6%E5%A4%84%E4%BA%8E%E6%89%93%E5%BC%80%E7%8A%B6%E6%80%81%EF%BC%9F.png)
为什么 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()