batch-file - 如何使用批处理脚本从文件名中提取子字符串?
问题描述
我有数百个文件要重命名以匹配新约定。当前约定是 AA.BBBB.XXX 我想将其更改为 BBBB.AA.XXX
我已经 cd'd 进入包含所有这些文件的文件夹。我想我可以简单地遍历文件并获取重建文件名所需的子字符串。问题是 %name% 在回显时似乎是空的。
for %%f in (*) do (
set name=%%f
set arr=%name:~0,3%
set sta=%name:~3,5%
set rest=%name:~8,26%
set new=%sta%%arr%%rest%
echo f: %%f
echo name: %name%
echo arr: %arr%
echo sta: %sta%
echo rest: %rest%
echo new: %new%
set
pause
)
正如你在底部看到的那样,我称之为“set”,所以我可以看到这些变量发生了什么。它显示 %name% 等于我的预期,但在回显时显示为空,并且我的其他变量分配无法从 %name% 中提取子字符串。
解决方案
如果您的约定中的点是字面的,
您可以使用它们将名称与 a 分开for /f
并重新排序各个部分。
编辑:由于Compos的提示更改了迭代以使用 RegEx 检查约定
:: Q:\Test\2019\05\23\SO_56266054.cmd
@Echo off
PushD "A:\Test"
For /f "delims=" %%F in ('Dir /B "??.????.*"^|findstr "^..\.....\.*"'
) do For /F "tokens=1,2*delims=." %%A in ("%%F"
) Do Echo Ren "%%F" "%%B.%%A.%%C"
PopD
如果输出看起来正常,请删除回声。
样本输出:
> Q:\Test\2019\05\23\SO_56266054.cmd
Ren "AA.BBBB.XXX" "BBBB.AA.XXX"
Ren "CC.DDDD.YYYY" "DDDD.CC.YYYY"
Ren "EE.FFFF.ZZZZZ" "FFFF.EE.ZZZZZ"
推荐阅读
- reactjs - 根据嵌套数据将数组拆分为块
- c++ - 自动返回值推断和 C++ 静态类型
- ruby-on-rails - 使用 Ruby on Rails 将 .zip 文件上传到 Cloudinary
- c++ - 具有接收/发送命令和请求/响应设计的 C++ 服务器
- python-3.x - BeautifulSoup .get_text() 元素不返回任何结果
- c++ - 从 dll 调用任何函数都会引发错误
- python - 如何使用 Tensorflow 操作加速 python 的 while 循环?
- mysql - MYSQL 加入并显示不匹配的记录
- arduino - 使用 Arduino / ESP8266 / ESP32 控制交流电
- reactjs - 为什么 useEffect 第一次运行,即使它正在收听道具?