【问题标题】:Find if " - " is in a directory name (batch)查找“ - ”是否在目录名称中(批处理)
【发布时间】:2013-03-28 18:03:58
【问题描述】:

在一个批次中我有一个

for /d /r %%a in (*) do 

如果 %%a 包含“ - ”(即空格 + 连字符 + 空格),我想做一个动作,如果它不包含这个字符串,我想做另一个动作。

我不能让它工作!你有什么主意吗?谢谢。

[PS : 我的问题与这个类似:Batch file: Find if substring is in string (not in a file) 但我无法对其进行调整以使其正常工作!]

【问题讨论】:

  • 使用for /d /r %%a in ("* - *"),如何获取“-”之前的部分(例如%%b)和“-”之后的部分为%%c?

标签: windows for-loop batch-file


【解决方案1】:

请试试这个:

for /d /r %%a in ("* - *") do 

它应该可以工作。

编辑:for /d /r 循环只查找 名称 中带有“-”的文件夹,因此不需要对 路径 进行额外测试。

【讨论】:

  • 谢谢!如何使用不包含“ - ”的文件夹进行第二次循环?
  • 试试这个(从根):for /f "delims=" %%i in ('dir /ad /s /b "myfolder12"') do set "folder=%%~i"echo %folder%
  • 这有点棘手,一个例子:@echo off &setlocalset "fname=bla bla - biz baz"set "right=%fname:* - =%"call set "left=%%fname: - %right%=%%"echo [%left%] * [%right%]
  • 对不起,我的时间已经结束了,这里是午夜... :)
  • 在代码块内,例如。 for 循环,您需要其他语法:@echo off &setlocal´ for /d %%a in () do (´ ` set "fname=%%~a"´ ` call set "right=%%fname : - =%%"´ ` call set "left=%%fname: - %right%=%%"´ ` call echo [%%left%%] * [%%right%%]´ ` )´
【解决方案2】:
@ECHO OFF
SETLOCAL
FOR /d /r %%a IN (*) DO (
 ECHO "%%~nxa"|FIND " - " >NUL
 IF ERRORLEVEL 1 (ECHO DO action ONE ON "%%a"
 ) ELSE (ECHO action TWO gets done ON "%%a")
)

FIND用于在“leaf”目录中定位“-”,所以只有最底层包含“-”时才会执行动作二,否则执行动作1。

如果您希望在文件路径中的任何位置出现“-”以使操作二发生,则将%%~nxa 更改为%%a

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多