自动从 Windows 文件名中删除无效字符

自动从 Windows 文件名中删除无效字符

我经常将 PDF 的标题粘贴到文件名中,以便轻松搜索。它们通常包含换行符或 等无效字符:,Windows 会弹出一个愚蠢的错误,然后将文件名恢复为原始名称:

在此处输入图片描述

我不在乎这些字符,如果能用它们替换-或完全删除它们,我会非常高兴。有什么方法可以做到这一点?有没有什么系统设置可以禁用此提示?

我能想到的最好的办法是使用 AutoHotkey 脚本,它有自己的键盘快捷键,用于“粘贴剪贴板但先删除无效字符”,这也是我目前正在使用的。

答案1

我确实会在需要时激活此 ahk 代码。ctrl+alt+shift+g(或您选择的任何内容)将自动复制并用下划线(或您想要的任何内容)替换禁用字符。(您实际上不需要完全理解它就可以对其进行自定义)。

!^+g::                              ;  Alt(!) CTRL(^) shift(+) G ----------------  replace \? <>/\\\*""|: by _ 
clipboard =                        ; empty clipboard
Send, {CTRLDOWN}c{CTRLUP}{ESC}     ; send the ctrl C command to copy text in clipboard
ClipWait                           ; wait until there is something in clip bord
Removesign := RegExReplace(clipboard, "[\? <>/\\\*""|:]", "_")  ; run the regex on the clipboard content and save it in Removesign 
clipboard = %Removesign%           ; send Removesign to clipboard
ClipWait
return

答案2

12 年后,这个问题仍然存在于 Windows 10 和 Windows 11 上。既然不可能,我们为什么要在文件名中粘贴带有格式的文本?我很困惑,为什么他们不默认在文件资源管理器中的文件名字段中粘贴时从剪贴板中删除任何格式……

但现在有一个调整Windows PowerToys称为粘贴为纯文本您可以在其中指定快捷方式来粘贴不带格式的文本。

在此处输入图片描述

PowerToys 粘贴为纯文本功能可让您使用快捷键粘贴剪贴板中存储的文本(不包括任何文本格式)。剪贴板文本中包含的任何格式都将被替换为未格式化的文本版本。

答案3

我的音乐文件也遇到了类似的问题。我最终编写了一个 Java 程序来重命名所有内容。我很幸运,因为有一些免费的 mp3 ID3 元数据库可用。我不确定是否有可用的免费库来读取 PDF 元数据。有关于它的讨论这里

经过大量搜索,我找到了这个工具(PDF重命名) 声称能够根据元数据重命名 PDF 文件。我以前从未见过或听说过。购买和下载风险自负。

答案4

我一直在使用此 AutoHotkey 键盘快捷键,虽然可以正常工作,但不是“自动”的:

;------------------------------------------------------------------------------
; Win+V: Paste as plain text from clipboard
;------------------------------------------------------------------------------
#v::
   Clip0 = %ClipBoardAll%
   ClipBoard = %ClipBoard% ; Convert to plain text
   Send ^v ; For best compatibility: SendPlay
   Sleep 50 ; Don't change clipboard while it is pasted! (Sleep > 0)
   ClipBoard = %Clip0% ; Restore original ClipBoard
   VarSetCapacity(Clip0, 0) ; Free memory
Return

;------------------------------------------------------------------------------
; Win+Alt+V: Paste plain text only, stripping characters unsafe for filenames
;------------------------------------------------------------------------------
#!v:: ; paste without formatting
  StringReplace, clipboardt, clipboard, `r`n, %A_Space%, All
  clipboardt := RegExReplace(clipboardt, "` {2,}", "` ")
  StringLeft, 1st, clipboardt, 1
  IfInString, 1st, %A_Space%
    StringTrimLeft, clipboardt, clipboardt, 1
  StringRIght, last, clipboardt, 1
  IfInString, last, %A_Space%
    StringTrimRight, clipboardt, clipboardt, 1
;Send {Raw}%clipboardt%

  Clip0 = %ClipBoardAll%
  ClipBoard = %clipboardt% ; Convert to plain text
  Send ^v ; For best compatibility: SendPlay
  Sleep 50 ; Don't change clipboard while it is pasted! (Sleep > 0)
  ClipBoard = %Clip0% ; Restore original ClipBoard
  VarSetCapacity(Clip0, 0) ; Free memory
  clipboardt =
return

相关内容