Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何重命名目录中的多个文件?_Powershell_Batch File_Scripting - Fatal编程技术网

Powershell 如何重命名目录中的多个文件?

Powershell 如何重命名目录中的多个文件?,powershell,batch-file,scripting,Powershell,Batch File,Scripting,我在目录中有许多文件,名称如下 injector.cpython-33.pyo PregnancyMegaMod.cpython-33.pyo 我需要从它们身上剪下.cpython-33一块,即重命名后的文件必须像这样 injector.pyo PregnancyMegaMod.pyo 如何编写批处理文件或PowerShell脚本?解决方案是 Get-ChildItem -Filter "*.pyo" -Recurse | Rename-Item -NewName {$_.name -rep

我在目录中有许多文件,名称如下

injector.cpython-33.pyo
PregnancyMegaMod.cpython-33.pyo
我需要从它们身上剪下
.cpython-33
一块,即重命名后的文件必须像这样

injector.pyo
PregnancyMegaMod.pyo
如何编写批处理文件或PowerShell脚本?

解决方案是

Get-ChildItem -Filter "*.pyo" -Recurse | Rename-Item -NewName {$_.name -replace '.cpython-33','' }

假设所有文件都没有额外的点(换句话说,没有像“a.b.cpython-33.pyo”这样的文件),那么您可以使用如下内容:

ren *.cpython-33.pyo" "??????????????????????????????????????????.pyo"
.cpython=33.pyo“
之前,必须有与最长名称一样多的
。有关详细信息,请参阅

如果可能有额外的点,那么您可以使用my-一种混合JScript/批处理脚本,它使用正则表达式替换执行重命名操作。它是从XP开始在任何Windows机器上本机运行的纯脚本

jren "\.cpython-33\.pyo$" ".pyo" /i
@ECHO关闭
SETLOCAL
设置“sourcedir=U:\sourcedir”
对于(“%sourcedir%\*.pyo”)中的%%a,对于(“%%~na”)中的%%b,如果/i“%%~xb”==”.cpython-33”ECHO(REN“%%~fa”%%~nb.pyo”,则执行
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境

所需的REN命令仅用于测试目的。
ECHO
ed。验证命令正确后,将
ECHO(REN
更改为
REN
以实际重命名文件

显然,该方法的关键是%%a行的


对于与所选目录中的掩码匹配的每个文件,获取名称部分,并使用该名称部分提取“名称”部分部分是所需的字符串,然后生成重命名命令。

您要求使用DOS。可能需要标记PowerScript并要求使用它,您需要一些时间来学习它,但我认为您会从中受益。DOS
REN
命令无法处理此问题。您使用的是长文件名,这表明您在Windows上,这表明PowerShell可用。是吗?没有区别,dos或PS…所有方法都是可能的…这是PowerShell中的一行程序,但根据合同,除非您正确标记并提出问题,否则我们无法帮助您。如果您想知道如何在PowerShell中执行此操作,请相应地编辑您的问题。否则,一些可怜的灵魂将不得不通过批处理文件来完成此操作。的版本文章完成了。非常好,甚至比我想的还要短。:-)您可能想使用
“*.cpython-33.pyo”
作为过滤器,否则它将毫无意义地尝试重命名已经正常的文件。非常好!接受您自己的答案,这样问题将按回答进行筛选。您可以使用
“%sourcedir%\*.cpython-33.pyo”
在第一个FOR语句中。该文件掩码不能与短的8.3名称匹配,因此应该是安全的。