[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 求助批处理,文件批量修改前后缀

问题是这样,将bat文件所在文件夹的上一级文件夹下的*.xls 文件(不含子文件夹中文件)进行改名,增加前后缀。

首先获取计算机名(格式为xp-01),现在需将计算机名中的“-”后面的字符 “01”加在文件名前,并添加下划线"_",作为前缀。
另外修改文件名后缀,原文件名格式为256689-.xls或  986623007-xxx.xls,  现在需将 -  后面的字符替换为指定的字符(假定为abc)。
则xp-01计算机中,文件最后改成的名称格式为如下形式:01_256689-abc.xls  、 01_986623007-abc.xls   

补充一下,只针对 .xls文件,不处理其他类型文件
多谢大家!!!

  1. #&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
  2. dir ../*.xls | %{
  3. $computername=[Regex]::Split($env:COMPUTERNAME,"-")[1]
  4. $name = [Regex]::Replace($_.BaseName,"-","")
  5. $ext_str = "abc"
  6. $filename = $computername + "_" + $name + "-" + $ext_str + $_.Extension
  7. Rename-Item -Path $_ -NewName $filename -Verbose
  8. }
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

本帖最后由 anszboy 于 2020-11-19 22:05 编辑

回复 2# ivor

我试试,非常感谢!!!

有一个小问题,就是上面的那个 986623007-xxx.xls 改名后  变成了  01_986623007xxx-abc.xls  ,可否将原来的后缀xxx去掉?

看了代码 自己琢磨改了下原语句,ok了
$name = [Regex]::Split($_.BaseName,"-")[0]

TOP

我现在将两个批处理文件合并在一起执行,将您的代码加在后面。运行报错了,改如何改?

@echo off & title 以当前批处理文件所在位置的层级为根目录,移动所有下级子目录里的所有文件到根目录,并删除空文件夹  警告:会覆盖同名文件
for /f "delims=" %%a in ('dir /a-d /b /s ') do (move "%%~a" ./)
for /f "tokens=*" %%i in ('dir/s/b/ad^|sort /r') do rd "%%i"


#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
dir ./*.xls | %{
$computername=[Regex]::Split($env:COMPUTERNAME,"-")[1]
$name = [Regex]::Split($_.BaseName,"-")[0]
$ext_str = "6分钟"
$filename = $computername + "_" + $name + "-" + $ext_str + $_.Extension
Rename-Item -Path $_ -NewName $filename -Verbose
}

TOP

[attach]12897[/attach]

TOP

  1. #&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
  2. cmd /c "for /f "delims=" %%a in ('dir /a-d /b /s ') do (move "%%~a" ./)"
  3. cmd /c "for /f "tokens=*" %%i in ('dir/s/b/ad^|sort /r') do rd "%%i""
  4. dir ./*.xls | %{
  5. $computername=[Regex]::Split($env:COMPUTERNAME,"-")[1]
  6. $name = [Regex]::Split($_.BaseName,"-")[0]
  7. $ext_str = "6分钟"
  8. $filename = $computername + "_" + $name + "-" + $ext_str + $_.Extension
  9. Rename-Item -Path $_ -NewName $filename -Verbose
  10. }
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

本帖最后由 anszboy 于 2020-11-20 14:14 编辑

回复 6# ivor


    你好,我是在使用xp系统的虚拟机上使用的,报错powershell 不是内部命令或外部命令,也不是可执行的程序.....

是不是通过这个获取计算机名?如果不行,改为获取bat所在文件夹名也可,其形式和计算机名差不多一样,为block_01、block_02.......,取其 “_”  后的字符作为文件的前缀。

另外想在改名执行完后增加一个操作,将bat所在的文件夹中的xls文件,全部拷贝到前一序号虚拟机的一个共享文件夹,假定目前bat所在文件夹的为x:\xxxx\xxxx\block_07 ,那么拷贝的目标位置为“\\XP-06\Output\block_07”;这里06是07的前一序号,

【虚拟机序号的编制形式是XP-01、XP-02、XP-03、XP-04、XP-05、XP-06、XP-07、XP-08、XP-09、XP-10、XP-11.......XP-99,共99个  ,所以上面所说的序号减1后,如果小于两位数,其前面要增加一个0】

不胜感谢!!

TOP

回复 1# anszboy
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "FilePrefix=%computername:*-=%"
  4. set "FileSuffix=abc"
  5. pushd "%~dp0..\"
  6. for /f "delims=" %%i in ('dir /b /a-d "*.xls"') do (
  7.     for /f "delims=-" %%j in ("%%i") do (
  8.         ren "%%i" "%FilePrefix%_%%j-%FileSuffix%%%~xi"
  9.     )
  10. )
  11. popd
复制代码
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 anszboy 于 2020-11-20 21:36 编辑

回复 8# Batcher


非常感谢!!!我试试。。

试了下,不行哦,什么反应也没有

TOP

返回列表