Batch file 批处理-findstr中的错误

Batch file 批处理-findstr中的错误,batch-file,findstr,Batch File,Findstr,我的目标是 映射网络文件夹 在每个确定的日期查找具有特定注册号的文件 将文件复制到特定位置 这是我的密码: set "folder=" set "date=" set "No=" set "fileName=" echo: set /p folder=Please enter the folder name echo: set /p date=Please enter report date yyyymmdd = echo

我的目标是

  • 映射网络文件夹
  • 在每个确定的日期查找具有特定注册号的文件
  • 将文件复制到特定位置
  • 这是我的密码:

        set "folder="
        set "date="
        set "No="
        set "fileName="
        echo:
        set /p folder=Please enter the folder name
        echo:
        set /p date=Please enter report date yyyymmdd = 
        echo:
        set /p No=Please enter registration number =  
        echo:
        net use Q: \\%folder%\d$\h
        net use R: \\%folder%\d$\p
        CD Q:\%date%\0\ | findstr /i %No% "*.*"
        echo:
        set /p fileName=Paste filename to resend = 
        echo:
        copy %fileName% y:
        echo:
        echo Copy Complete
        echo:
    
    以下是输出:

    Please enter the folder you want to connect/reconnect = 0714
    Please enter report date yyyymm = 201407
    Please enter registration number =  74471958
    The command completed successfully.
    The command completed successfully.
    
    FINDSTR: Cannot open NTUSER.DAT
    FINDSTR: Cannot open NTUSER.DAT.LOG
    
    Paste filename to resend =
    
    我当前正在从D:运行批处理,我已将findstr.exe复制到运行批处理文件的同一文件夹中


    目前我真的没有主意了,希望有人能给我指出正确的方向。

    需要
    findstr.exe
    的问题恰恰取决于您如何执行此批处理。此可执行文件应位于
    c:\windows\system32
    中,并且该目录应位于
    路径中。我将
    echo%path%
    并从那里开始追踪它

    下一个问题是
    %date%
    。这是一个神奇的变量,它包含当前日期。它可以被
    set
    命令覆盖,但是如果它像您在代码中所做的那样设置为nothing,那么它将以当前用户的格式返回当前系统日期

    AFAIAA,
    CD
    不产生输出;它只是更改目录

    我怀疑您使用的是
    cygwin
    ,它为某些命令提供了不同的定义。

    您的问题在于:

    CD Q:\%date%\0\ | findstr /i %No% "*.*"
    
    管道
    |
    获取上一个命令的输出并将其提供给下一个命令

    cd
    命令的输出为空(或“系统无法找到此路径”)

    所以这不是(我认为)你需要的

    我想,您应该转到
    Q:\%date%\0\
    并在那里搜索包含
    %no%
    的文件

    为此,请使用:

    cd /d "Q:\%date%\0\"
    findstr /i %No% "*.*"
    
    您需要使用
    /d
    参数和
    cd
    来切换到另一个驱动器(或使用
    pushd
    而不是
    cd