Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Loops 循环批处理。。用于确定搜索文件长度的通配符?_Loops_Batch File_For Loop_Wildcard - Fatal编程技术网

Loops 循环批处理。。用于确定搜索文件长度的通配符?

Loops 循环批处理。。用于确定搜索文件长度的通配符?,loops,batch-file,for-loop,wildcard,Loops,Batch File,For Loop,Wildcard,我被困在一段主要不是我自己写的代码上。我正在寻找一个代码,该代码在所有扩展名为.dwg的文件中运行,以K_E开头,长度为9。我本能地使用了通配符,但那不起作用 K_E?????.dwg会在我脑子里耍花招……但不会 我之所以需要这个长度,是因为在更深的文件夹中 K_E?????xx.dwg和其他文件 子文件夹中的其他文件可以有一系列其他名称,一般的想法是,我只需要名为K_E[insert 6numbershere].dwg的文件,或者文件夹深度限制为2。我还尝试在文件夹名称中使用通配符,以允许代码

我被困在一段主要不是我自己写的代码上。我正在寻找一个代码,该代码在所有扩展名为.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")

所以您只想排除名称中包含
备份的文件?这应该起作用:

@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
@ECHO关闭
SETLOCAL ENABLEDELAYEDEXPANSION
设置“sourcedir=C:\Users\b00m49\Desktop\LSPTEST”
设置“sourcedir=U:\sourcedir”
对于(K_E*.dwg)中的/r“%sourcedir%”%%a,请执行以下操作(
对于/f“tokens=1,6delims=\”%%m IN(“%%a”)DO(
REM%%n包含目录名或文件名或空
REM%%n仅在0、1或2级以下为空。
如果“%%n”==”“(
设置“名称=%%~na”
如果“!名称:~9!”==”如果“!名称:~8!”neq“(
REM名称的长度不超过9个字符,但超过8个字符
ECHO(启动/等待“C:\Program Files\Autodesk\Autocad 2013\acad.exe”“%%a”/b“C:\Users\b00m49\Desktop\LSPTEST\expSQM.scr”)
)
)
)
)
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境。我使用了一个测试目录

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

我不确定你所说的“两级下降”是什么意思-我假设目标目录+两级。由于你的实际目录比我的测试目录多3级,你可能需要将
1,6
更改为
1,9

只需使用标记功能即可确保目录的级别不超过?级,其中驱动器名和文件名按级别计算。如果有,则忽略该文件

然后获取名称-我们知道前3个字符是
K_E
,但我们希望后面正好有6个字符,因此请查看是否有字符10+,如果没有,请确保字符9存在(从0开始计数),如果这两个条件都有效,则必须是K_E*6个字符*

如果需要,可以确保所有6个字符都是数字,但不是实际指定的

顺便说一句,若要添加信息,请将其编辑到您的问题中,这样人们就不必到处追问了


@ECHO关闭
SETLOCAL ENABLEDELAYEDEXPANSION
设置“sourcedir=U:\Users\b00m49\Desktop\LSPTEST”
对于(K_E*.dwg)中的/r“%sourcedir%”%%a,请执行以下操作(
对于/f“tokens=1,9delims=\”%%m IN(“%%a”)DO(
REM%%n包含目录名或文件名或空
REM%%n仅在0、1或2级以下为空。
如果“%%n”==”“(
设置“名称=%%~na”
如果“!名称:~9!”==”如果“!名称:~8!”neq“(
REM名称的长度不超过9个字符,但超过8个字符
ECHO(启动/等待“”“C:\Program Files\Autodesk\Autocad 2013\acad.exe”“%%a”/b“C:\Users\b00m49\Desktop\LSPTEST\expSQM.scr”)
)
)
)
)
暂停
后藤:EOF
这对我有用

注:

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

您需要在
sourcedir
的设置中将
U:
更改为
C:
,让它处理您的
C:
驱动器


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

No..我应该更直接地告诉你们。这里的第一个问题。子文件夹中的其他文件可以有一系列其他名称,一般的想法是,我只想要名为K_E[insert 6numbers here]的文件.dwg,或者文件夹深度限制=2。我还尝试了文件夹名称中的通配符,以允许代码仅在2个深度文件夹中查找K_E*.dwg文件,但这也不起作用。类似于C:\Users\b00m49\Desktop\LSPTEST**\K_E*.dwg的内容也可以起作用。因为其他名称只出现在更深的文件夹中。谢谢r reply!!非常感谢您的帮助。我会尽力理解您键入的内容。.这是一个新主题。“”注释之间的项目是否存在?我是否应该删除这些项目以使代码正常工作?我认为我不理解“仅在0、1或2级以下为空”…这看起来很符合逻辑,但我对所有这些命令都很陌生,不确定是否可以修改它。我将尝试对此进行一些试验。再次感谢!我现在明白REM是注释..那么我应该如何更改sourcedir的设置?我没有看到您的测试目录..我应该删除行集“sourcedir=U:\sourcedir”吗?是的-这只是当前选择我的测试目录。您还需要将
1,6
更改为
1,9
,因为您指定的目录还有3个级别。好的。我按照您所说的编辑了代码。批立即打开和关闭。我将值更改为6,7,8,9,但这不起作用。关于长度