需要有关在 Windows 中重新编写此批处理脚本以消除文件名中我想要的字符的指导

Posted

技术标签:

【中文标题】需要有关在 Windows 中重新编写此批处理脚本以消除文件名中我想要的字符的指导【英文标题】:Need guidance on re-write this batch script in windows to eliminate the characters I want from file names 【发布时间】:2021-02-06 22:57:30 【问题描述】:

上面的这个脚本删除了所有文件名前面的字母 A。

@echo off
  for %%a in (A*.*) do ren "A*" "/*"

假设我想去掉文件名的最后几个字母(2 个或更多字符)例如,对于名为 Dinnermenu_FR 的文件,我想去掉文件名中的 _FR 或 FR。

@echo off
  for %%a in (*.*_FR) do ren "*FR" "/*"

如果我想保留下划线但去掉后面的字符,我应该如何重写?

【问题讨论】:

你的例子中的编程语言是什么? echo,适用于 windows,所以 bash?对不起,只是一个初学者。 它在我看来不像是一个 shell 脚本。 问题中的代码都是MS-Windows .bat 文件语法。与bash 无关。添加适当的标签,专家将查看您的问题。祝你好运。 _FR 是文件名的一部分还是扩展名的一部分? (根据您的代码判断它是扩展的一部分)文件甚至有扩展名吗? (根据你的例子它没有)。请澄清。 【参考方案1】:
REM for each matching file do...
for %%a in (*_FR.*) do (
  REM get the part of the filename before the underscore...
  for /f "delims=_" %%b in ("%%~na") do (
    REM rename the file...
    ECHO ren "%%a" "%%b%%~xa"
  )
)

我注释了每一行,所以你应该能够理解代码。有关修饰符 %%~.. 的帮助,请参阅 for /?。 我还通过回应它来“解除”ren 命令。排除故障后删除ECHO,当您确定时,它会按照您的意愿行事。

【讨论】:

愚蠢的问题,所有这些都在循环中吗? cmets 只是 REM 标准,对吗? 是的,REM 是评论(源自“remark”)。见rem /?for 循环以 for .... do ( 开头并以相应的 ) 结尾(嗯,这在技术上不准确,但现在可以) 当我保存为 bat 文件并运行它时,它似乎不起作用。我应该只运行部分脚本吗? 你说脚本是循环去掉下划线之前的? 我想去掉每个文件名中的每个_FR,在文件名的末尾。

以上是关于需要有关在 Windows 中重新编写此批处理脚本以消除文件名中我想要的字符的指导的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell错误“在此系统上禁用了脚本的执行。”

需要编写python脚本在cygwin中执行linux命令[关闭]

bat脚本获取电脑上所有windows服务的信息?

求高手编写Shell脚本,实现调用Linux下的SQLITE,导入CSV文件的功能

Windows 批处理文件 - 网络使用遇到“系统错误 64”

BAT文件编写基础知识