Batch file 批处理和应用程序中的If语句不再被识别

Batch file 批处理和应用程序中的If语句不再被识别,batch-file,if-statement,cmd,net-use,Batch File,If Statement,Cmd,Net Use,我尝试访问存储在服务器上的一些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 *.xl

我尝试访问存储在服务器上的一些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'未被识别为内部或外部命令、可操作程序或批处理文件。

第一次使用网络时,驱动器安装正确;文件已正确复制,但当我要删除驱动器时,出现此错误


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

PATH是由Windows定义的环境变量,其中包含命令处理器应在其中搜索文件扩展名列在环境变量PATHEXT中的可执行文件或脚本的目录。在新的命令提示窗口中运行
设置路径
或仅运行
设置
,以获得预定义的环境变量及其当前值

您的批处理代码包含:

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

为将
Z:\
指定为值的环境变量使用不同的名称

最好是另外使用的两种情况

%SystemRoot%\System32\net.exe

这将避免命令处理器在当前目录和路径的所有目录中搜索
net.*
,直到找到文件扩展名列在PATHEXT

PATH是由包含命令所在目录的窗口定义的环境变量处理器应搜索文件扩展名列在环境变量PATHEXT中的可执行文件或脚本。在新的命令提示窗口中运行
设置路径
或仅运行
设置
,以获得预定义的环境变量及其当前值

您的批处理代码包含:

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

为将
Z:\
指定为值的环境变量使用不同的名称

最好是另外使用的两种情况

%SystemRoot%\System32\net.exe

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

中为止。问题在于PATH语句(脚本的第三行)

看起来您误解了该命令的作用。“路径”未设置当前目录。它设置要搜索程序的目录列表

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

z:

或者,如果我误解了,你想在Z:上搜索程序,那么说

设置路径=z:;%路径%
这会将Z:添加到您的路径中


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

问题在于您的path语句(脚本的第三行)

看起来您误解了该命令的作用。“路径”未设置当前目录。它设置要搜索程序的目录列表

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

z:

或者,如果我误解了,你想在Z:上搜索程序,那么说

设置路径=z:;%路径%
这会将Z:添加到您的路径中


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

请查看所提供的批处理代码中出现的所有
%path%
,您会发现您的答案不正确,因为J.Grunder只是将
path
用作保存单个目录路径的简单变量。感谢您的帮助David,我了解您的解决方案,但稍后我将使用此变量列出文件,因此我不希望在我的%System32%上执行此检查,这可能需要很长时间。我把环境变量路径弄糊涂了;我没有注意到J Grunder使用了
path
作为一个简单变量。我建议保留path的通常含义,并为局部变量使用不同的变量名。这更干净,更易于维护,而不是破坏路径,然后必须显式列出
net
的目录(以及将来更新时此脚本调用的任何其他程序)。请查看问题中提供的批处理代码中出现的所有
%path%
,您会发现您的答案不正确,因为J.Grunder刚刚将
path
用作保存单个目录路径的简单变量。感谢您的帮助David,我了解您的解决方案,但稍后我将使用此变量列出文件,因此,我不希望此检查在我的%System32%上完成,这可能需要很长时间。我把环境变量路径弄糊涂了;我没有注意到J Grunder使用了
path
作为一个简单变量。我建议保留path的通常含义,并为局部变量使用不同的变量名。这更干净,更易于维护,而不是破坏路径,然后必须显式列出
net
(以及该脚本在将来更新时调用的任何其他程序)的目录;我使用了最后一个命题:
%SystemRoot%\System32\net.exe
,而不是重命名变量。谢谢您的帮助。我建议您将var重命名为