Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
Windows 替换或删除文件夹中所有文件的文件名中的某些字符_Windows_File_Powershell_Batch File_Cmd - Fatal编程技术网

Windows 替换或删除文件夹中所有文件的文件名中的某些字符

Windows 替换或删除文件夹中所有文件的文件名中的某些字符,windows,file,powershell,batch-file,cmd,Windows,File,Powershell,Batch File,Cmd,如何通过批处理文件执行来删除某些字符或用其他字符替换某些字符,对于Windows文件夹中所有文件的文件名,是否有DOS命令用于此操作?我建议使用重命名命令。在命令行中键入ren/?以获取更多帮助。此批处理文件可以提供帮助,但有一些限制。无法替换文件名字符=和%(从这里的内存开始),文件名中的“^”也可能是一个问题 在这一部分中,%newname:=\u%在下一块的每一行上,它将:之后的字符替换为=之后的字符,因此,这一组字符将替换为下划线 删除echo以激活ren命令,因为它只会将命令打印到控制

如何通过批处理文件执行来删除某些字符或用其他字符替换某些字符,对于Windows文件夹中所有文件的文件名,是否有DOS命令用于此操作?

我建议使用
重命名
命令。在命令行中键入
ren/?
以获取更多帮助。

此批处理文件可以提供帮助,但有一些限制。无法替换文件名字符=和%(从这里的内存开始),文件名中的“^”也可能是一个问题

在这一部分中,
%newname:=\u%
在下一块的每一行上,它将
之后的字符替换为
=
之后的字符,因此,这一组字符将替换为下划线

删除
echo
以激活ren命令,因为它只会将命令打印到控制台窗口,直到您执行此操作为止

它将只处理当前文件夹,除非您将
/s
添加到DIR命令部分,然后它也将处理当前文件夹下的所有文件夹

要删除某个字符,请从=符号后删除该字符。在
%newname:z=%
中,这样的条目将删除所有z字符(不区分大小写)


使用PowerShell可以为DOS提示符执行更智能的操作。在这里,我展示了如何批量重命名当前目录中包含空格的所有文件和目录,方法是将它们替换为
下划线

Dir |
Rename-Item -NewName { $_.Name -replace " ","_" }
编辑:
(可选)可以使用
Where Object
命令为后续cmdlet(command-let)筛选出不合格的对象。以下是一些示例,以说明它可以为您提供的灵活性:

  • 跳过任何文档文件

    Dir |
    Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } |
    Rename-Item -NewName { $_.Name -replace " ","_" }
    
  • 仅处理目录(3.0之前的版本)

    PowerShell v3.0引入了新的
    Dir
    标志。您也可以在那里使用
    Dir-Directory

  • 跳过任何已包含下划线(或其他字符)的文件


Windows PowerShell中删除或重命名某些字符的一行命令如下所示。(此处,空格替换为下划线)


PowerShell的答案很好,但是Rename Item命令在同一个目标目录中不起作用,除非您的所有文件中都包含不需要的字符(如果发现重复项,则失败)

如果您和我一样,有好名字和坏名字,请尝试使用此脚本(将用下划线替换空格):


Where Object
的用法是什么。不用
Where Object也可以这样做
@JesonPark感谢您指出这一点。我在
Where Object
用法中添加了一些更好的示例。Rename-Item:源路径和目标路径必须不同。错误:/@MERTDOĞ如果目标路径和名称保持不变,则重命名项会自动忽略重命名请求。例如,如果未找到可替换的空间。它不会抛出任何错误。如果您给我们您使用的确切PS命令,也许我们可以解决您的问题。对我不起作用。我想是因为我想替换圆点。在这种情况下,help me.Rename-Item:源路径和目标路径必须不同。错误:/Hey我不太明白该在何处输入此命令以及如何定位所需的目录。仅适用于Windows操作系统。跑转到文件夹并按上述方式运行命令(记住更改搜索参数)使用
-creplace
进行区分大小写的搜索。在许多其他OST上也支持此解决方案(正如您所提到的,由于一些文件不包含要替换的字符,我认为公认的答案会抛出错误)+1、如果能在此上下文中对
-Recurse
标志和
Move Item
命令有更多的解释,我将不胜感激。这也是我的最佳解决方案。很容易抛出“被另一个进程使用”错误。关闭所有其他窗口修复了此问题。谢谢达斯汀:)
Dir |
Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } |
Rename-Item -NewName { $_.Name -replace " ","_" }
Dir |
Where-Object { $_.Mode -match "^d" } |
Rename-Item -NewName { $_.Name -replace " ","_" }
Dir |
Where-Object { -not $_.Name.Contains("_") } |
Rename-Item -NewName { $_.Name -replace " ","_" }
Dir | Rename-Item –NewName { $_.name –replace " ","_" }
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }