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

end*_*ith 7 windows-7 filenames

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

在此输入图像描述

我不关心这些角色,如果用它们替换-或完全删除它们,我会非常高兴。我有什么办法可以做到这一点吗?是否有系统设置可以禁用此提示?

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

end*_*ith 0

我一直在使用这个 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
Run Code Online (Sandbox Code Playgroud)