求个简单的dos批处理程序修改文件名

tiger波波 2020-03-11 09:06:06
假如文件夹里有一系列文件:
1-data.txt
2-data.txt
...
11-data.txt

想对应改为:
数据001.txt
数据002.txt
...
数据011.txt

不要用excel复制穷举,要通过代码、通配符适配
...全文
190 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2020-03-13
  • 打赏
  • 举报
回复
试试
@echo load filelist please wait...
for /f "delims=" %%a in ('dir /b *.txt') do @echo "%%a"
pause
Yofoo 2020-03-13
  • 打赏
  • 举报
回复
明显是你复制的的有问题, 有非法字符, 自己改下就好了 如果想简单也简单不了太多, 上面bat定义了几个函数, 简化只能把函数改成内嵌, 提示去掉, for /f "delims=" %%a in ('dir /b *data.txt') 这段是获取或有文件 :ConvertName echo ConvertName in: %1 set inname=%~n1 set /a n=%inname%-1 set /a n=%n%+1 set nstr=%n% 这段是提取文件名中的数字 :loop_len set chk=%nstr:~2,3% if not "%chk%"=="" goto :loop_len_end set nstr=0%nstr% goto :loop_len :loop_len_end 这段是根据数字生成带0开头的文件名 set nstr=数据%nstr%.txt echo ConvertName out: %nstr% goto :eof 生成完整文件名 :ProcessOne set infile=%1 echo ProcessOne: %infile% call :ConvertName %1 set outfile=%outdir%\%nstr% copy %infile% %outfile% goto :eof 复制文件
tiger波波 2020-03-12
  • 打赏
  • 举报
回复
引用 1 楼 Yofoo 的回复:

@echo off
cls
set srcdir=%~1
set outdir=%srcdir%_out

%~d1
cd %srcdir%
md %outdir%
echo outdir: %outdir%
echo load filelist please wait...
for /f "delims=" %%a in ('dir /b *data.txt') do call :ProcessOne "%srcdir%\%%a"
goto End

:ConvertName
echo ConvertName in: %1
set inname=%~n1
set /a n=%inname%-1
set /a n=%n%+1
set nstr=%n%

:loop_len
set chk=%nstr:~2,3%
if not "%chk%"=="" goto :loop_len_end
set nstr=0%nstr%
goto :loop_len
:loop_len_end

set nstr=数据%nstr%.txt
echo ConvertName out: %nstr%
goto :eof

:ProcessOne
set infile=%1
echo ProcessOne: %infile%
call :ConvertName %1
set outfile=%outdir%\%nstr%
copy %infile% %outfile%
goto :eof

:End
pause
文件夹作为参数调用
多谢指教,运行出错。这个批处理太复杂了,符号很抽象,读不懂。 能不能弄个简单点的,bat和文件就在同一目录,也不用备份、拷到别的路经,就在本文件夹改名就行。备份我手工来做。
Yofoo 2020-03-11
  • 打赏
  • 举报
回复

@echo off
cls
set srcdir=%~1
set outdir=%srcdir%_out

%~d1
cd %srcdir%
md %outdir%
echo outdir: %outdir%
echo load filelist please wait...
for /f "delims=" %%a in ('dir /b *data.txt') do call :ProcessOne "%srcdir%\%%a"
goto End

:ConvertName
echo ConvertName in: %1
set inname=%~n1
set /a n=%inname%-1
set /a n=%n%+1
set nstr=%n%

:loop_len
set chk=%nstr:~2,3%
if not "%chk%"=="" goto :loop_len_end
set nstr=0%nstr%
goto :loop_len
:loop_len_end

set nstr=数据%nstr%.txt
echo ConvertName out: %nstr%
goto :eof

:ProcessOne
set infile=%1
echo ProcessOne: %infile%
call :ConvertName %1
set outfile=%outdir%\%nstr%
copy %infile% %outfile%
goto :eof

:End
pause
文件夹作为参数调用

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧