【问题标题】:How can i make a batch file test if a file can be renamed?如果文件可以重命名,我如何进行批处理文件测试?
【发布时间】:2016-11-24 12:57:44
【问题描述】:

我需要有人帮我制作一个 bacth 文件,该文件可以测试文件是否可以重命名,然后打开一个信息框,告知该文件是否可以重命名..

所有这一切的问题是我使用交互式 pdf 文件,如果我网络上的两个人同时打开文件,他们都无法保存他们在文件中所做的更改。但是我知道如果有人打开了文件,它就不能重命名,所以我需要一个批处理文件来测试文件是否可以在不重命名的情况下重命名。如果可以重命名,我需要它打开一个弹出框说“文件已准备好编辑”,如果不能重命名,我需要弹出框说“文件正在使用,请稍后再试”

如果有人愿意接受这个挑战,我会很高兴:)

最好的问候
迪翁

@echo 关闭
ren "file.pdf" "file.pdf" 2>nul || (
echo 抱歉,文件正在使用中。
echo 请稍后再试。
否则启动“C:\Test”文件.pdf
)

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    您几乎已经回答了自己的问题,却没有意识到:-)

    只需尝试将文件重命名为相同的名称。如果成功,则文件没有被锁定,没有任何危害。如果失败,那么你就知道文件被锁定了。

    例如:

    @echo off
    ren "yourFile.pdf" "yourFile.pdf" 2>nul || (
      echo Sorry, file is locked by another user
      rem Take some error action, perhaps GOTO or EXIT /B
    )
    rem Now open the pdf file
    

    但请注意 - 此策略并非万无一失,因为您有竞争条件。如果两个进程几乎同时针对同一个文件运行,那么它们都可能在其中一个有机会打开文件之前成功地“重命名”文件。

    【讨论】:

    • 感谢@dbenham,代码几乎是完美的:) 我只需要添加一个启动命令,因此如果文件未使用,它将启动 pdf 文件.. 这是我的看法,(见原帖顶部)
    • @DionChristensen - 看起来不错,虽然 "C:\Test" 让我有点失望 - 不知道你的意图是什么。如果第一个参数被这样引用,则 START 命令会将第一个参数解释为窗口标题,尽管可执行程序很可能会用自己的窗口标题覆盖该窗口标题。即使它没有效果,如果程序参数由于路径中的空格之类的原因需要引号,则提供标题可能很关键。如果您打算将"C:\Test" 用作您的pdf 所在的路径,那么正确的语法应该是start "" "c:\test\file.pdf"
    【解决方案2】:

    试试这个代码:

    ren "pdffile.pdf" "renameto.pdf"
    if %errorlevel% NEQ 0 (
        echo The file cannot be renamed.
        rem The following line makes a dialog box saying that an error happened:
        echo msgbox "The file could not be renamed.">"%TEMP%\msg.vbs" && cscript /nologo "%TEMP%\msg.vbs" && del "%TEMP%\msg.vbs"
        rem put other commands here
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多