Batch For loop ..通配符来确定搜索文件的长度?

时间:2016-03-09 08:37:14

标签: loops batch-file for-loop wildcard

我坚持使用我主要不写自己的代码。我正在寻找一个代码,该代码遍历所有扩展名为.dwg的文件,并以K_E开头,长度为9.我本能地使用通配符,但这不起作用..

K_E ??????。dwg会在我的头脑中做到这一点..但是没有。

我需要这个长度的原因是,在更深的文件夹中有 K_E ?????? xx.dwg等文件。

子文件夹中的其他文件可以有一系列其他名称,一般的想法是我只想要名为K_E [insert 6numbershere] .dwg的文件,或者文件夹深度= 2的限制。我也是尝试在文件夹名称中使用通配符,以允许代码仅在2个深层文件夹中查找K_E * .dwg文件,但这也没有用。像C:\ Users \ b00m49 \ Desktop \ LSPTEST ** \ K_E * .dwg这样的东西也可以工作..

代码应该打开图纸,应用脚本,然后转到下一个文件。

这是我到目前为止所做的工作。

 for /r "C:\Users\b00m49\Desktop\LSPTEST" %%a in (K_E*.dwg) do ( start /wait "C:\Program Files\Autodesk\Autocad 2013\acad.exe" "%%a" /b "C:\Users\b00m49\Desktop\LSPTEST\expSQM.scr")

2 个答案:

答案 0 :(得分:1)

所以你只想在名字中排除包含backup的文件?这应该有效:

@echo off
setlocal enabledelayedexpansion
for /r "C:\Users\b00m49\Desktop\LSPTEST" %%a in (K_E*.dwg) do (
    set filename=%%a
    if "!filename:backup=!"=="!filename!" (
        rem start /wait "C:\Program Files\Autodesk\Autocad 2013\acad.exe" "%%a" /b "C:\Users\b00m49\Desktop\LSPTEST\expSQM.scr"
    )
)
pause

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=C:\Users\b00m49\Desktop\LSPTEST"
SET "sourcedir=U:\sourcedir"
for /r "%sourcedir%" %%a in (K_E*.dwg) do (
 FOR /f "tokens=1,6delims=\" %%m IN ("%%a") DO (
  REM %%n contain dirname or filename or empty
  REM %%n is only empty for 0, 1 or 2 levels down.
  IF "%%n"=="" (
   SET "name=%%~na"
   IF "!name:~9!"=="" IF "!name:~8!" neq "" (
    REM the name is not longer than 9 characters, but IS longer than 8
     ECHO(start /wait "C:\Program Files\Autodesk\Autocad 2013\acad.exe" "%%a" /b "C:\Users\b00m49\Desktop\LSPTEST\expSQM.scr")
   )
  )
 )
)
GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。我使用了一个测试目录。

所需的START命令仅用于ECHO用于测试目的。 在您确认命令正确后,将ECHO(START更改为START以实际启动流程。

我不确定你的意思是什么?"两个级别" - 我已经假设目标目录+两个级别。由于您的实际目标比我的测试目录多3个级别,因此您可能需要将1,6更改为1,9

只需使用标记功能即可确保不超过?目录级别,其中drivename和filename计为级别。如果有,请忽略该文件。

然后得到名字 - 我们知道前3个字符是K_E但是我们想要后面只有6个字符,所以看看是否有10+字符,如果没有,请确保字符9存在(字符数从0)并且如果这两个条件都有效则必须是K_E * 6characters *

如果需要,可以确保所有6个字符都是数字,但实际上并未指定。

顺便说一句 - 要添加信息,请将其编辑到您的问题中,这样人们就不需要追逐整个帖子。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\Users\b00m49\Desktop\LSPTEST"
for /r "%sourcedir%" %%a in (K_E*.dwg) do (
 FOR /f "tokens=1,9delims=\" %%m IN ("%%a") DO (
  REM %%n contain dirname or filename or empty
  REM %%n is only empty for 0, 1 or 2 levels down.
  IF "%%n"=="" (
   SET "name=%%~na"
   IF "!name:~9!"=="" IF "!name:~8!" neq "" (
    REM the name is not longer than 9 characters, but IS longer than 8
     ECHO(start /wait "" "C:\Program Files\Autodesk\Autocad 2013\acad.exe" "%%a" /b "C:\Users\b00m49\Desktop\LSPTEST\expSQM.scr")
   )
  )
 )
)
pause
GOTO :EOF

这对我有用。

注意:

pause行应在显示要执行的命令后停止该过程。

您需要在U:设置中将C:更改为sourcedir,以便让它处理您的c:广告。

您需要将ECHO(start更改为start才能实际执行autocad处理。此技术(echo命令)用于显示命令以便对其进行验证。注意我还故意插入一对兔子的耳朵(""),因为start的第一个引用的参数被视为窗口标题。