获取名称中包含字符串的文件数

aki*_*uri 0 windows cmd batch-file

我在Context菜单中创建了一个自定义子菜单,当我遇到问题时我会更新它.

它的工作方式是我有模板文件.每当我单击子菜单上的项目(文件类型)时,该模板文件将被复制到当前文件夹并重命名.例如:

@echo off
copy C:\Windows\CustomNew\templates\html.html "%cd%"
rename html.html "New HTML Document.html"
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是,如果我创建两个HTML文件,第一个重命名,但第二个不重命名.那是因为"New HTML Document.html"当前文件夹中已有一个名称文件.所以它只是保持"html.html".为了解决这个问题,我试过:

@echo off

setlocal enabledelayedexpansion

copy C:\Windows\CustomNew\templates\html.html "%cd%"

set name="New HTML Document.html"

if exist %name% (
    set name="New HTML Document (2).html"
)

rename html.html !name!
Run Code Online (Sandbox Code Playgroud)

这有效,但如果我想创建两个以上的文件呢?我还有最初的问题.要解决这个问题,我需要获取"New HTML Document"其名称中包含的文件数,向其中添加1,并相应地重命名新文件.我怎么做?

Ste*_*han 5

实现一个计数器和一个循环:

@ECHO OFF
break>html.html
setlocal enabledelayedexpansion

set "name=New HTML Document.html"
set count=0

:loop
if not exist "%name%" goto :continue
set /a count+=1
set "name=New HTML Document (%count%).html"
goto :loop

:continue
rename html.html "%name%"
dir new*
Run Code Online (Sandbox Code Playgroud)

  • 我的代码有效(请注意使用"%name%"`的不同地方(引用)).`set"var = value"`是首选语法.在需要的地方处理引号(`ren ..."%var%"`),不要将它们包含在变量中.("首选"并不意味着"强制",因此您的代码也可以工作,但尝试习惯首选语法以避免几种可能的失败) (2认同)