【问题标题】:How to keep first 50 characters of a filename in prompt Windows如何在提示 Windows 中保留文件名的前 50 个字符
【发布时间】:2020-03-09 16:55:59
【问题描述】:

我给你写信是因为我需要创建一个批处理文件,它允许我重命名 .pdf 中的许多文件,只保留前 50 个字符。

我试过这个:

for %i in (*.txt) do (set fName=%i)
ren %fName% %fName:~0,-11%.txt

但这只会删除最后 11 个字符。 我试图修改这段代码,但我无法做我需要的。

我认为对于比我更专业的人来说这是一件非常容易的事情,所以我问你是否可以帮助我。

提前致谢。

我在下面插入更正后出现的错误:

C:\Users\---\Desktop\Conversione PDFA>for %fname:~0,50% in (*.pdf) do (set fname=%~ni)
graeiojpoghnpiofsdnpibnwapobnslnsdlekpfèwekrgpjbm was unexpected at this time.

C:\Users\---\Desktop\Conversione PDFA>for %fname:~0,50% in (*.pdf) do (set fname=%~ni)
graeiojpoghnpiofsdnpibnwapobnslnsdlekpfèwekrgpjbm was unexpected at this time.

C:\Users\---\Desktop\Conversione PDFA>for %fname:~0,50% in (*.pdf) do (set fname=%i)
graeiojpoghnpiofsdnpibnwapobnslnsdlekpfèwekrgpjbm was unexpected at this time.



C:\Users\---\Desktop\Conversione PDFA>ren %fName% !fname:~0,50!.pdf
The syntax of the command is incorrect.

C:\Users\---\Desktop\Conversione PDFA>ren %fName% %!fname:~0,50!.pdf
The syntax of the command is incorrect.

【问题讨论】:

  • 删除最后 11 个字符正是您编码的内容。阅读set /? 的输出以了解有关子字符串处理的更多信息。
  • 提示 #1:%fname:~0,50%。提示 #2 set fname=%%~ni。提示 #3 setlocal enabledelayedexpansion!fname:~0,50!.txt 结合在 for 循环内部,而不是外部。
  • ...在结束循环之前不要忘记endlocal!请注意,从批处理文件中,您还需要将%i 更改为%%i,然后我建议将!fname:~0,50!.txt 更改为!fname:~0,50!%%~xi 以获得更好的可移植性。
  • 您好,感谢您的反馈。我试图做出您推荐的更正,但我只收到语法错误。我很可能不清楚在哪里进行更改。你能支持我吗?谢谢

标签: windows batch-file command line prompt


【解决方案1】:

for %fname:~0,50% ...:只是没有。
for %i in (*.pdf) do set fname=%i:是的。

您要重命名多个 PDF,因此 ren 命令应该在循环中。这在单个命令行中是可能的,但丑陋且容易出错(尤其是当您(还)还没有使用cmd 语法时),所以我不建议这样做。您最好的方法是使用批处理文件。它更具可读性和可维护性。

@echo off
setlocal enabledelayedexpansion
for %%i in (*.pdf) do (
  set "fname=%%~ni"
  ECHO ren "%%~fi" "!fname:~0,50!%%~xi"
)

有关修饰符%%~ni等的说明,请参见for /?
请参阅delayed expansion 以了解!fname! 的用法,而不是%fname%

注意:出于安全原因,我只是通过回显它来“解除”ren 命令。当您验证后,这正是您想要的,只需删除 ECHO

【讨论】:

  • 非常感谢它成功了,但是现在我想剪掉第一部分而不是最后一部分,请问您可以告诉我要更改什么吗?谢谢
  • !fname:~0,50! 表示“取一个从位置0(第一个字符)开始的子字符串并取一个50 个字符。!fname:~50 取一个从位置50(第51 个字符)开始的字符串) 直到字符串的末尾(因为缺少第二个参数(长度)。要提取最后 50 个字符,请使用!fname:~-50!(从末尾的位置50 开始;长度再次丢失,所以直到最后字符串的) 都在set /? 中用示例进行了描述。
  • 成功了,谢谢!最终代码是这个@echo off setlocal enabledelayedexpansion for %%i in (*.pdf) do ( set "fname=%%~ni" ren "%%~fi" "!fname:~-46!%%~xi" )
猜你喜欢
  • 2017-08-25
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多