如何在没有 C 语言等程序帮助的情况下,仅使用 Windows 的基本功能简单地保持文件处于打开状态?

如何在没有 C 语言等程序帮助的情况下,仅使用 Windows 的基本功能简单地保持文件处于打开状态?

为什么 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()

相关内容