除空格问题

tao 2月前 54

程序在运行的时候,老是因为名字有空格导致报错,可以用powershell写个程序,检查该目录下所有文件夹的名称,遇到有空格的就重命名文件夹,把文件夹名称里面的空格删掉。

Get-ChildItem -Directory | ForEach-Object {
    $newName = $_.Name -replace " ", ""  # 去掉空格
    if ($_.Name -ne $newName) {          # 只有当名称有空格时才改名
        Rename-Item -Path $_.FullName -NewName $newName
        Write-Host "重命名: '$($_.Name)' → '$newName'"
    }
}

另存为clcfolderspace.ps1


如果想空格替换成下划线_,用

Get-ChildItem -Directory | ForEach-Object {
    $newName = $_.Name -replace " ", "_" 
    if ($_.Name -ne $newName) {
        Rename-Item -Path $_.FullName -NewName $newName
        Write-Host "重命名: '$($_.Name)' → '$newName'"
    }
}

另存为repfolderspace.ps1


想删多一点,比如删除空格、圆括号 () 和方括号 [],用

Get-ChildItem -Directory | ForEach-Object {
    $newName = $_.Name -replace "[\s\(\)\[\]]", ""  # 删除空格和括号
    if ($_.Name -ne $newName) {
        Rename-Item -Path $_.FullName -NewName $newName
        Write-Host "重命名: '$($_.Name)' → '$newName'"
    }
}

另存为clcfoldersymbol.ps1


如果不是文件夹,而是各种全类型文件,用

Get-ChildItem -File | ForEach-Object {
    $newName = $_.Name -replace " ", ""  # 去掉空格
    if ($_.Name -ne $newName) {          # 只有当名称有空格时才改名
        Rename-Item -Path $_.FullName -NewName $newName
        Write-Host "重命名: '$($_.Name)' → '$newName'"
    }
}

另存为clcfilenamespace.ps1


如果不分文件和文件夹,只要是当前目录下都干掉,用

Get-ChildItem | ForEach-Object {
    $newName = $_.Name -replace " ", ""  # 去掉空格
    if ($_.Name -ne $newName) {
        Rename-Item -Path $_.FullName -NewName $newName
        Write-Host "重命名: '$($_.Name)' → '$newName'"
    }
}

另存为clcallnamespace.ps1


如果想对当前目录下所有文件和文件夹名上用 _ 替换空格,而不是删除:

Get-ChildItem | ForEach-Object {
    $newName = $_.Name -replace " ", "_"
    if ($_.Name -ne $newName) {
        Rename-Item -Path $_.FullName -NewName $newName
        Write-Host "重命名: '$($_.Name)' → '$newName'"
    }
}

另存为repallnamespace.ps1


如果你希望 不仅仅是当前目录,而是包括所有子文件夹里的文件,可以用:

Get-ChildItem -File -Recurse | ForEach-Object {
    $newName = $_.Name -replace " ", ""
    if ($_.Name -ne $newName) {
        Rename-Item -Path $_.FullName -NewName $newName
        Write-Host "重命名: '$($_.Name)' → '$newName'"
    }
}

另存为clcallallnamespace.ps1


还有两种,是删全部下面的文件夹的名字和文件的名字,以及删全部下面的文件夹的名字而不删文件的,


只是一个函数的参数

修改所有文件名称(包括子目录中的文件) `Get-ChildItem -File -Recurse

修改所有文件和文件夹名称(递归) `Get-ChildItem -Recurse

只修改文件夹的名称(递归) `Get-ChildItem -Directory -Recurse

就是 -File  -Directory  -Recurse

加-File就是只改文件名,加-Directory就是只改文件夹名,都不加就是文件名和文件夹名都改;

加-Recurse是递归处理子目录,不加就是仅处理当前目录,

避免复制下来粘贴会报错,上传一个ps1文件,其他都在上面改了存就好用。



上传的附件:
最新回复 (0)
返回
发新帖