Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件findstr,如何?_Batch File_Findstr - Fatal编程技术网

Batch file 批处理文件findstr,如何?

Batch file 批处理文件findstr,如何?,batch-file,findstr,Batch File,Findstr,我正在编写一个批处理文件: @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION @REM Set defaults SET BASE_FLDR=.\ SET BLD_TYPE=Release @REM Check if base folder specified, if not default to current location IF NOT [%1] == [] SET BASE_FLDR=%1 @REM Check if build type specif

我正在编写一个批处理文件:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
@REM Set defaults
SET BASE_FLDR=.\
SET BLD_TYPE=Release
@REM Check if base folder specified, if not default to current location
IF NOT [%1] == [] SET BASE_FLDR=%1
@REM Check if build type specified, if not default to Release
IF NOT [%2] == [] SET BLD_TYPE=%2
@REM Display parameters
ECHO Base folder: %BASE_FLDR%
ECHO Build type : %BLD_TYPE%
@REM Create list of subfolders to search
FOR /F "delims=" %%F IN ('DIR %BASE_FLDR% /S /B /A:D') DO (
    ECHO [%%F] | FINDSTR /E /X /IC:"%BLD_TYPE%" [%%F] >NUL && (
        ECHO %%F
    )
)
我想做的是能够像这样调用批处理文件:

copydlls ./ Release
我希望批处理文件使用命令行参数1(%1)来指定起始位置,%2可以是“Debug”或“Release”,对参数的这种解析是可以的

在循环中,我尝试使用FINDSTR查找以%2中提供的文件夹名称结尾的所有子文件夹

这一点不正确,我需要帮助


到目前为止,我的代码将正确捕获文件夹事件,其中文件夹包含空格[]修复了该事件,但现在它与字符串结尾不匹配。

而不是使用
if%errorlevel%
尝试
if!错误等级,因为在执行块之前,在解析块时计算扩展百分比

但那没用,因为你的代码坏了。
Findstr/X
永远无法匹配,因为
/X
仅对于
BLD_类型
而言,整行必须匹配不能为true

顺便说一句,将findstr移动到FOR循环中可以简化它

FOR /F "delims=" %%F IN ('"DIR %BASE_FLDR% /S /B /A:D | FINDSTR /E /IC:"%BLD_TYPE%" "') DO (
   echo #1 %%F
)

不要使用
if%errorlevel%
尝试
if!错误等级,因为在执行块之前,在解析块时计算扩展百分比

但那没用,因为你的代码坏了。
Findstr/X
永远无法匹配,因为
/X
仅对于
BLD_类型
而言,整行必须匹配不能为true

顺便说一句,将findstr移动到FOR循环中可以简化它

FOR /F "delims=" %%F IN ('"DIR %BASE_FLDR% /S /B /A:D | FINDSTR /E /IC:"%BLD_TYPE%" "') DO (
   echo #1 %%F
)

谢谢,差不多了,但不完全正确……我认为它不能正确地处理文件夹中的空格。@Splaten那么你应该在失败的地方至少添加一些示例名称文件夹中的空格失败了,仔细研究一下,我认为解决方案是将FINDSTR与正则表达式一起使用,现在正在寻找一个常规表达式一些进度,但仍然不正确,只需将%%F更改为[%%F]即可停止拆分内容,但也会停止检查的结束。可能
FINDSTR/EIC:\%BLD\u TYPE%”
以避免(不太可能但可能)误报?谢谢你,差不多,但不完全正确…我认为它不能正确处理文件夹中的空格。@Splaten然后你应该在失败的地方添加至少一些示例名称文件夹中的空格失败了,仔细研究一下,我认为解决方案是将FINDSTR与正则表达式一起使用,现在正在寻找正则表达式有些进展,但仍然不正确,只需将%%F更改为[%%F]即可停止拆分内容,但也会停止检查结束。可能
FINDSTR/EIC:“\%BLD\u TYPE%”
可避免(不太可能但可能)误报?您知道,如果同时设置了基本FLD,则设置BLD\u TYPE仅起作用?如果删除第一个参数,则BLD_类型为空。为什么要将
%%F
附加到Findstr参数中?是的,我知道。您知道,设置BLD类型仅在同时设置基本FLD的情况下有效吗?如果删除第一个参数,则BLD_类型为空。为什么要将
%%F
附加到Findstr参数?是的,我知道。