对目录中的文件执行某些操作,但不要以某个特定的字符串开头

时间:2018-09-16 21:04:55

标签: string batch-file for-loop if-statement

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

for %%A in (%2) do (
set fname="%%A"
    if not "%fname:~0,3%"=="asd" (
        echo input "%%A" now produce "asd_%%A"
    )
)

基本上,为了进行大规模转换,我将不使用setif部分来运行它。我将像my_cmd --all *.png这样运行。同样,将这两部分排除在外也可以正常运行。一旦将它们包括进来,它对我的​​作用就无法预测。如果我可以避免为此设置变量fname,那就太好了,但是根据我在其他帖子中所读的内容,我不能。关于这一点,我可能应该将这些变量设置为临时/本地/删除/等。我该怎么做?我刚开始批量生产,所以即使在网上看也毫无头绪。

1 个答案:

答案 0 :(得分:1)

您的代码有些错误。

不要将引号分配给变量,除非您确定自己知道自己在做什么以及为什么需要它们。不过,您可以使用引号来保护将字符串分配给变量。

您位于带括号的代码块中,该代码块要求对变量使用延迟扩展。必须使用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