`!` 运算符在批处理脚本中的不同用法?以及带有切片运算符的嵌套 DelayedExpansions~ 问题

问题描述 投票:0回答:0

我的

ffind.bat
是一个简单的脚本,通过简单的方法在整个电脑分区中搜索文件/目录:搜索命令
dir "\*%toFind%*" /s
,使用for循环为每个分区运行一次。

  • 问题:虽然我使用

    @echo off
    抑制命令而不是它们的o/p,但批处理不断将其内容打印到终端,仅用看似最后一次迭代的值替换变量。并不断重新打印几次!

  • 注意:此命令以前可以使用,但作为 cmder 别名,即(

    doskey
    )并且仅在一个驱动器内搜索驱动器现在在终端中,例如(c:) 别名:
    ffind=dir "\*$**" /s

  • ffind.bat
    脚本:


@echo off
setlocal EnableDelayedExpansion
set oldpath=%cd%

set "toFind=%1"
set alphabet= !"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"

@for /L %%a in (65,1,90) do (

   rem chr %%a > tmpFileChrBat.txt
   rem set /p crntDrive= < tmpFileChrBat.txt
   rem del tmpFileChrBat.txt 
   
   rem following 2 commands does almost what `chr.bat` was doing
   set /a tmp=%%a - 32
   set crntDrive=!alphabet:~!tmp!,1!
       
   if exist !crntDrive!: (
       
       cd /d !crntDrive!:
       
       dir "\*%toFind%*" /s
           
   )
)

cd /d %oldpath%
endlocal

编辑:阅读这些内容后更新了我的脚本:

  1. 如何在 /F 循环内设置变量
  2. 变量的行为不符合预期

而且我现在不会从这个批处理脚本中调用任何其他

.bat
来消除任何其他因素

现在停了!当我执行它并将参数传递给它时,它根本没有做任何事情

batch-file cmd cmder
© www.soinside.com 2019 - 2024. All rights reserved.