String 对其不在的目录中的文件执行操作';不要以某个字符串开头

String 对其不在的目录中的文件执行操作';不要以某个字符串开头,string,batch-file,for-loop,if-statement,String,Batch File,For Loop,If Statement,我正试图写一个程序来转换照片。它可以很好地转换所有照片,但是考虑到输出是如何以asd开头的,我希望它跳过以它开头的文件。下面是一些要澄清的示例代码(为了简单起见,将echo用作我的流程): 基本上,为了进行大规模转换,我会在不使用集合和if部分的情况下运行它。我会像my_cmd--all*.png那样运行这个。同样,排除这两个部分后,运行良好。一旦我把它们包括进来,它(对我)的行为就不可预测了。如果我能避免为此设置变量fname,那就太棒了,但从我在其他帖子中读到的来看,我做不到。请注意,我可能

我正试图写一个程序来转换照片。它可以很好地转换所有照片,但是考虑到输出是如何以
asd
开头的,我希望它跳过以它开头的文件。下面是一些要澄清的示例代码(为了简单起见,将echo用作我的流程):


基本上,为了进行大规模转换,我会在不使用
集合
if
部分的情况下运行它。我会像
my_cmd--all*.png
那样运行这个。同样,排除这两个部分后,运行良好。一旦我把它们包括进来,它(对我)的行为就不可预测了。如果我能避免为此设置变量
fname
,那就太棒了,但从我在其他帖子中读到的来看,我做不到。请注意,我可能应该将这些变量设置为临时/本地/删除/等等。我将如何做到这一点?我是批处理的新手,所以即使在网上查看,我也没有任何线索。

您的代码有几处错误

除非你确定自己知道自己在做什么以及为什么需要引号,否则不要给变量加引号。不过,您可以使用引号来保护字符串对变量的赋值

您位于一个括号内的代码块中,该代码块要求对变量使用延迟扩展。这必须通过
setlocal
命令启用,并且还需要使用感叹号而不是百分号来引用变量

@echo off
setlocal enabledelayedexpansion
for %%A in (%2) do (
    set "fname=%%A"
    if not "!fname:~0,3!"=="asd" (
        echo input "%%A" now produce "asd_%%A"
    )
)
或者,您可以使用DIR命令列出您的文件,并将其传输到
FINDSTR
命令,以查找不以字符串开头的文件

FOR /F "delims=" %%G IN ('dir /a-d /b *.png ^|findstr /I /B /V "asd"') do echo %%G

在命令提示符下键入
SET/?
,以获取解决此问题所需的所有帮助。
FOR /F "delims=" %%G IN ('dir /a-d /b *.png ^|findstr /I /B /V "asd"') do echo %%G