windows 删除文件夹中所有文件名的第一个空格以内的所有字符

j2cgzkjk  于 2023-08-07  发布在  Windows
关注(0)|答案(2)|浏览(164)

我试图写一个.bat脚本来重命名文件夹中的每个文件,方法是删除所有文件名中的所有字符,直到第一个空格。即:
ABC defghij -> defghij
我需要为文件夹中的所有文件自动执行此操作。有办法做到这一点吗?
这就是我所尝试的:

For %y in (directory) do (for /f “tokens=1,*” %%A in %y do ren %y” “%%B”)

字符串

3okqufwl

3okqufwl1#

@ECHO OFF
SETLOCAL
rem The following setting for the directory is a name
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files\t w o"
FOR /f "delims=" %%y IN ('dir /b /a-d "%sourcedir%\* *"') DO (
 FOR /f "tokens=1*delims= " %%b IN ("%%y") DO (
  IF EXIST "%sourcedir%\%%c" (ECHO Cannot RENAME "%%y" to "%%c" - already exists) ELSE (
    ECHO REN "%sourcedir%\%%y" "%%c"
  )
 )
)

GOTO :EOF

字符串

应用真实的数据前,务必先验证测试目录。

注记

  • 你的代码有不平衡的引号。
  • 您的代码有“智能引号”-需要纯引号
  • %y在命令提示符下是正确的,但metavariables(如%%y)在批处理文件中需要一个双%

所需的REN命令仅用于测试目的。验证命令正确后,将ECHO REN更改为REN,以实际重命名文件。
相当简单的过程-处理一个目录列表匹配的filemask的文件名只,tokenise作为尝试,测试是否重命名是可能的,如果它不是报告和重命名,如果它是。

0qx6xfy6

0qx6xfy62#

使用PowerShell,它更容易。最简单的方法涉及正则表达式替换

ls | ren -Ne { $_.Name -replace "^.+? " } -wi
# or
ls | ren -Ne { $_.Name -replace ".+? (.*)", '$1' } -wi

字符串
或完整命令

Get-ChildItem -Filter "* *" | Rename-Item -NewName { $_.Name -replace "^.+? " } -WhatIf
# or
Get-ChildItem -Filter "* *" | Rename-Item -NewName { $_.Name -replace ".+? (.*)", '$1' } -WhatIf


-WhatIf/-wi用于空运行,删除它以进行真实的的重命名
"^.+? "匹配第一个“单词”及其后面的下一个空格并删除,而".+? (.*)"捕获字符串的其余部分并替换为捕获的内容

相关问题