batch-file - 批量将文件移动到以相同编号开头的文件夹
问题描述
我们有很多备份配置文件,我们需要保存在驱动器上。
该文件是123456_name.cfg
或12345_name.cfg
这可能会有所不同,但总是以 5-6 int 的数字开头。
我正在尝试制作一个批处理文件,它检查“_”之前名称前面的数字,
如果文件夹也以相同的数字开头,则将文件复制到其中,
如果文件夹不存在,则创建一个文件夹 ID 名称并将文件复制到其中。这是我已经测试过的:
@echo off &setlocal
for /f "delims=" %%i in ('dir /b /a-d *.cfg') do (
set "filename1=%%~i"
setlocal enabledelayedexpansion
set "folder1=!filename1:~0,5!"
mkdir "!folder1!" 2>nul
move "!filename1!" "!folder1!" >nul
endlocal
)
问题是我有以 5 个数字或 6 个数字开头的文件。实际上它只使用前 5 个数字而不是文件全名创建一个文件夹。如果只能检查“_”之前的id
解决方案
在以下位置拆分字符串_
:
@echo off &setlocal
for %%a in (12345 123456 987 987654321) do break>%%a_name.cfg
for /f "delims=" %%i in ('dir /b /a-d *.cfg') do (
for /f "delims=_" %%j in ("%%~ni") do (
mkdir "%%j" 2>nul
move "%%i" "%%j"
)
)
第一个for %%a
只是生成一些测试文件。
第三个for
( %%j
) 拆分文件名 ( %%~ni
) 并在 (first) 之前取第一部分_
所以在move "%%i" "%%j"
,%%i
是完整的驱动器:\path\filename 并且%%j
只是数字
推荐阅读
- python - 如何在 FTP 服务器上检查目录中的更改?
- apache - Apache 服务器不允许 HTTP 请求中的授权标头
- excel - 在 OpenOffice Calc 中突出显示列中的重复值
- php - SQLSTATE [22007]:无效的日期时间格式:1366 不正确的整数值:第 1 行的列 'infraction_id' 的整数值:'["1","3","66","68"]'
- forms - 将在此 Flash 应用程序中工作的最大整数(从头开始)
- java - PlayWS - 达到请求超时时如何抛出异常?
- sqlite - 如何在sqlite中选择今天中午12点到第二天早上5点的销售
- c++ - 用 C 向量替换 C++ 向量
- cakephp - 从 cakphp 表单操作中删除 id
- python - 在 Keras 的自定义损失函数中重塑张量