我坚持使用我主要不写自己的代码。我正在寻找一个代码,该代码遍历所有扩展名为.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")
答案 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
的第一个引用的参数被视为窗口标题。