批处理如何读取文件名中的最后一位数字然后使用该数字+ 1移动
Batch How to read last digit in file name then move using that digit + 1
所以我有一个程序制作一个名为 "demo.dem" 的文件,我现在正在做的是将它移到另一个文件夹。我想要一个批处理脚本将文件从 "C:\foo" 移动到 "C:\bar" 这本身很简单,但该文件将包含多个名为 "demo.dem" 的文件,所以我需要它来添加一个新数字根据文件夹中已有的内容。假设我的文件夹中已经有演示 1-5。那么下一个需要是 "demo6.dem" 下面我有一些代码,但我不是批处理专家。
copy C:\foo\demo.dem C:\bar\demo1.dem
del C:\bar\demo.dem
如您所知,这是行不通的。任何人都知道如何让它正常工作?
(如果您觉得可以更好地措辞,请编辑 post。)
这可能不是最优雅的方法,因为它只是迭代直到成功,但它应该有效:
@echo off
set counter=1
:retry
if NOT EXIST c:\bar\demo%counter%.dem (
move c:\foo\demo.dem c:\bar\demo%counter%.dem
) else (
set /a counter=%counter%+1
goto retry
)
echo.
echo Created c:\bar\demo%counter%.dem!
echo.
set counter=
这并不完全是您想要做的,但可以使用变量 %RANDOM%
和 %TIME%
作为名称来实现目标,但无论如何以下内容应该可以完成工作。
注意: 命令 FOR
搜索由连字符 -
和点 .
包围的数字,即。演示-001.dem
所以遵守重命名掩码很重要,否则稍后脚本可能无法检测到最大数字。
如果万一你想换掩码,那么会带你去处理设置token
和delims
。
@echo off
echo List directory
dir /b C:\bar\ |sort /r
for /f "tokens=2 delims=-." %%a in ('dir /b C:\bar\demo-???.dem ^|sort /r ^|findstr /r [0-9]') do (
set "num=%%a"
goto done
)
:done
set /a "num=%num%+1"
dir /b |sort /r
echo the highest number found is %num% -1
move c:\foo\demo.dem c:\bar\demo-%num%.dem
dir /b C:\bar\ |sort /r
更新:
我已经编辑了 Dir
命令的掩码以仅列出具有特定掩码 (dir /b C:\bar\demo-???.dem
) 的文件以保持文件正确排序,否则如果你有 1-2 位数字且前面没有 0 的文件应该打破排序。
示例:假设您对这堆文件进行排序:demo-009.txt、demo-010.txt、demo-3.txt;没有面具 (dir /b demo-???.txt
) 你会得到 demo-3.txt 作为最高数字。所以编号前面的0很重要。
所以我有一个程序制作一个名为 "demo.dem" 的文件,我现在正在做的是将它移到另一个文件夹。我想要一个批处理脚本将文件从 "C:\foo" 移动到 "C:\bar" 这本身很简单,但该文件将包含多个名为 "demo.dem" 的文件,所以我需要它来添加一个新数字根据文件夹中已有的内容。假设我的文件夹中已经有演示 1-5。那么下一个需要是 "demo6.dem" 下面我有一些代码,但我不是批处理专家。
copy C:\foo\demo.dem C:\bar\demo1.dem
del C:\bar\demo.dem
如您所知,这是行不通的。任何人都知道如何让它正常工作? (如果您觉得可以更好地措辞,请编辑 post。)
这可能不是最优雅的方法,因为它只是迭代直到成功,但它应该有效:
@echo off
set counter=1
:retry
if NOT EXIST c:\bar\demo%counter%.dem (
move c:\foo\demo.dem c:\bar\demo%counter%.dem
) else (
set /a counter=%counter%+1
goto retry
)
echo.
echo Created c:\bar\demo%counter%.dem!
echo.
set counter=
这并不完全是您想要做的,但可以使用变量 %RANDOM%
和 %TIME%
作为名称来实现目标,但无论如何以下内容应该可以完成工作。
注意: 命令 FOR
搜索由连字符 -
和点 .
包围的数字,即。演示-001.dem
所以遵守重命名掩码很重要,否则稍后脚本可能无法检测到最大数字。
如果万一你想换掩码,那么会带你去处理设置token
和delims
。
@echo off
echo List directory
dir /b C:\bar\ |sort /r
for /f "tokens=2 delims=-." %%a in ('dir /b C:\bar\demo-???.dem ^|sort /r ^|findstr /r [0-9]') do (
set "num=%%a"
goto done
)
:done
set /a "num=%num%+1"
dir /b |sort /r
echo the highest number found is %num% -1
move c:\foo\demo.dem c:\bar\demo-%num%.dem
dir /b C:\bar\ |sort /r
更新:
我已经编辑了 Dir
命令的掩码以仅列出具有特定掩码 (dir /b C:\bar\demo-???.dem
) 的文件以保持文件正确排序,否则如果你有 1-2 位数字且前面没有 0 的文件应该打破排序。
示例:假设您对这堆文件进行排序:demo-009.txt、demo-010.txt、demo-3.txt;没有面具 (dir /b demo-???.txt
) 你会得到 demo-3.txt 作为最高数字。所以编号前面的0很重要。