Batch file windows批处理文件重命名
我在Windows7中有一些文件,如Batch file windows批处理文件重命名,batch-file,rename,Batch File,Rename,我在Windows7中有一些文件,如AAA_a001.jpg,BBB_a002.jpg,CCC_a003.jpg 我正在尝试使用批处理将这些文件重命名为a001_AAA.jpg,a002_BBB.jpg,a003_CCC.jpg 只需在之间交换内容即可 我已经搜索了一段时间,但仍然不知道如何做到这一点。 有人能帮忙吗? 谢谢。使用REN命令 Ren用于rename ren ( where the file is located ) ( the new name ) 范例 ren C:\User
AAA_a001.jpg
,BBB_a002.jpg
,CCC_a003.jpg
我正在尝试使用批处理将这些文件重命名为a001_AAA.jpg
,a002_BBB.jpg
,a003_CCC.jpg
只需在之间交换内容即可
我已经搜索了一段时间,但仍然不知道如何做到这一点。
有人能帮忙吗?
谢谢。使用REN
命令
Ren
用于rename
ren ( where the file is located ) ( the new name )
范例
ren C:\Users\&username%\Desktop\aaa.txt bbb.txt
它将把aaa.txt更改为bbb.txt
您的代码将是:
ren (file located)AAA_a001.jpg a001.AAA.jpg
ren (file located)BBB_a002.jpg a002.BBB.jpg
ren (file located)CCC_a003.jpg a003.CCC.jpg
等等
IT WILL NOT WORK IF THERE IS SPACES!
希望能有帮助:D
@echo off
pushd "pathToYourFolder" || exit /b
for /f "eol=: delims=" %%F in ('dir /b /a-d *_*.jpg') do (
for /f "tokens=1* eol=_ delims=_" %%A in ("%%~nF") do ren "%%F" "%%~nB_%%A%%~xF"
)
popd
注意:名称在第一次出现\uu
时被拆分。如果文件名为“part1\u part2\u part3.jpg”,那么它将被重命名为“part2\u part3\u part1.jpg”我假设您知道\u
之前和下划线之后的部分长度,以及扩展名。如果不这样做,它可能比简单的子字符串更复杂
cd C:\path\to\the\files
for /f %%a IN ('dir /b *.jpg') do (
set p=%a:~0,3%
set q=%a:~4,4%
set b=%p_%q.jpg
ren %a %b
)
我只是想出了这个脚本,我没有测试它。查看并获取更多信息
如果你想假设你不知道
的位置、长度和延伸,我想你可以用for循环来检查
的索引,然后是
的最后一个索引,用一个转到的东西来包装它,让它工作起来。如果你愿意经历这样的麻烦,我建议你至少(为了你自己)使用WindowsPowerShell(或Cygwin),或者安装一种更高级的脚本语言(想想Python/Perl),无论哪种方式,你都会得到更多的支持。正如Itsproinc所说,REN
命令很有效
但如果文件路径/名称包含空格,请使用引号“”
例如:
ren C:\Users\&username%\Desktop\my file.txt not my file.txt
添加“”
希望它能帮助我用代码重命名
echo off
setlocal EnableDelayedExpansion
for %%a in (*.txt) do (
REM echo %%a
set x=%%a
set mes=!x:~17,3!
if !mes!==JAN (
set mes=01
)
if !mes!==ENE (
set mes=01
)
if !mes!==FEB (
set mes=02
)
if !mes!==MAR (
set mes=03
)
if !mes!==APR (
set mes=04
)
if !mes!==MAY (
set mes=05
)
if !mes!==JUN (
set mes=06
)
if !mes!==JUL (
set mes=07
)
if !mes!==AUG (
set mes=08
)
if !mes!==SEP (
set mes=09
)
if !mes!==OCT (
set mes=10
)
if !mes!==NOV (
set mes=11
)
if !mes!==DEC (
set mes=12
)
ren %%a !x:~20,4!!mes!!x:~15,2!.txt
echo !x:~20,4!!mes!!x:~15,2!.txt
)
我通过PowerShell找到了此解决方案:
dir |重命名项-NewName{$\u.name-replace“replaceME”,“mynewtext”}
这将重命名当前文件夹中所有文件的一部分。PowerShell方式适合我,更易于理解和更改。但是,出现了一些错误,比如rename item:Source和destination path必须不同
,直到我稍微更改了它。
要仅重命名文件夹的文件,请执行以下操作:
dir | Where Object{$.Name-match'replaceMe'}| Rename Item-NewName{$.Name-replace'replaceMe','myNewText'}
要递归重命名文件夹和子文件夹的文件,请执行以下操作:
获取ChildItem-Recurse | Where对象{$.Name-match'.Core.}|重命名项-NewName{$.Name-replace'.Core.','.Framework.}
只是在“\ux”之间交换内容
你明白问题是什么吗?我知道我应该用ren来重命名文件,但我的问题是,我不知道如何进行这些字符串操作,或者说我真的不知道:/请对交换内容进行一个很好的解释?有一种模式类似于PART1\u PART2.EXT
,OP希望将某个目录中的所有文件重命名为PART2\u PART1.EXT
。我猜:PI想在“u”之间交换内容,例如:AAA_BBB.txt=>BBB_AAA.txt这正是我需要的。谢谢还有一个小问题:它也交换了.jpg。例如part1_part2.jpg=>part2.jpg_part1Orz@raphael0914 - ??? 它非常适合我:part1_part2.jpg-->part2_part1.jpg这里发生了一些奇怪的事情,因为这损坏了文件名。也许-replace参数包含regex或其他内容
echo off
setlocal EnableDelayedExpansion
for %%a in (*.txt) do (
REM echo %%a
set x=%%a
set mes=!x:~17,3!
if !mes!==JAN (
set mes=01
)
if !mes!==ENE (
set mes=01
)
if !mes!==FEB (
set mes=02
)
if !mes!==MAR (
set mes=03
)
if !mes!==APR (
set mes=04
)
if !mes!==MAY (
set mes=05
)
if !mes!==JUN (
set mes=06
)
if !mes!==JUL (
set mes=07
)
if !mes!==AUG (
set mes=08
)
if !mes!==SEP (
set mes=09
)
if !mes!==OCT (
set mes=10
)
if !mes!==NOV (
set mes=11
)
if !mes!==DEC (
set mes=12
)
ren %%a !x:~20,4!!mes!!x:~15,2!.txt
echo !x:~20,4!!mes!!x:~15,2!.txt
)