【问题标题】:If statement in batch and app not recognized anymore如果批处理和应用程序不再识别语句
【发布时间】:2015-12-29 11:55:06
【问题描述】:

我尝试访问存储在服务器上的一些 Excel 数据并将这些文件复制到另一台服务器;目标路径应与文件名不同。这是我的代码:

setlocal enabledelayedexpansion
net use Z: \\10.0.0.1\Statistiques
set path=Z:\
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
echo %date%
for /f "delims=" %%a in ('dir *.xlsx /b /a-d "%path%" ') do (
    set "name=%%~na"
    set folder=Empty
    if "!name!"=="!name:Client1=!" (
        set folder=Client1
    )
    if "!name!"=="!name:Client2=!" (
        set folder=Client2
    )
    copy "%path%%%a" "\\10.0.0.2\Documents\Statistiques\!folder!\%year%%month%%day%_!name!%%~xa"
)
net use Z: /delete

我的问题是最后一个'net' is not recognized as an internal or external command, operable program or batch file.

第一次上网时,驱动正确挂载;文件已正确复制,但当我想删除驱动器时出现此错误。

可能是我的 if () 语句中的错误?

【问题讨论】:

    标签: batch-file if-statement cmd net-use


    【解决方案1】:

    PATH 是由 Windows 定义的环境变量,其中包含命令处理器应搜索具有环境变量 PATHEXT 中列出的文件扩展名的可执行文件或脚本的目录。在新的命令提示符窗口set path 或只是set 中运行以获取预定义的环境变量及其当前值。

    您的批处理代码包含:

    set path=Z:\
    

    这会覆盖 Windows 定义的 PATH 的值,因此命令处理器无法再找到 net.exe,因为它不在驱动器 Z: 的当前目录或根目录中。

    为将Z:\分配为值的环境变量使用不同的名称。

    最好另外同时使用 net

    %SystemRoot%\System32\net.exe
    

    这将避免需要通过命令处理器在当前目录和 PATH 的所有目录中搜索net.*,直到找到具有 PATHEXT 中列出的文件扩展名的文件强>。

    【讨论】:

    • 是的,我对系统变量路径感到困惑;我使用了最后一个命题:%SystemRoot%\System32\net.exe,而不是重命名变量。感谢您的帮助。
    • 我建议您将 var 重命名为 path 以外的名称,而不是明确给出 net.exe 的完整路径。这将使您的代码更具可读性,更重要的是,在您忘记这个问题几个月后,当您在脚本中添加另一行取决于查看有效路径时,您不会再感到惊讶。跨度>
    【解决方案2】:

    问题在于您的路径语句(脚本的第三行)。

    您似乎误解了该命令的作用。 “路径”不设置您的当前目录。它设置将搜索程序的目录列表。

    如果您想将当前目录设置为 z:,只需说 z:

    或者,如果我理解错了,你也想在 Z: 上搜索节目,然后说 set path=z:;%path% 这会将 Z: 添加到您的路径中。

    您告诉计算机只在 Z: 中查找程序。因此,它无法找到 net(或许多其他程序)。

    【讨论】:

    • 请查看所提供的批处理代码中所有出现的%path%,您会发现您的答案不正确,因为J. Grunder 刚刚使用path 作为保存单个目录的简单变量路径。
    • 感谢您的帮助大卫,我了解您的解决方案,但后来我使用此 var 列出文件,所以我不希望在我的 %System32% 上完成此检查,这可能需要很长时间。我对环境变量路径感到困惑。
    • 你是对的;我错过了 J Grunder 使用 path 作为一个简单的变量。我建议保留其通常含义的路径,并为局部变量使用不同的变量名。这更干净,更易于维护,而不是破坏路径,然后必须显式列出 net 的目录(以及将来更新时此脚本调用的任何其他程序)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2011-08-05
    • 2022-01-11
    相关资源
    最近更新 更多