Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I often paste titles of PDFs into their filenames so I can easily search for them. They often have invalid characters like newlines or :, and Windows pops up a stupid error and then reverts the filename to its original:

enter image description here

I don't care about those characters and would be perfectly happy if it replaced them with - or removed them entirely. Is there some way I can do this? Any system setting for disabling this prompt?

The best I can think of is an AutoHotkey script with its own keyboard shortcut for "paste clipboard but remove invalid characters first", which is what I'm currently using.

share|improve this question
1  
If you're doing this regularly, perhaps a better automated process would work more efficiently. – Hello71 Oct 29 '11 at 23:03
    
@Hello71: What does that mean? – endolith Oct 30 '11 at 17:38

I had a similar issue with my music files. I ended up writing a Java program to rename everything. I was lucky since there were some free mp3 ID3 metadata libraries available. I'm not sure if there is a free library available to read PDF metadata. There is a discussion about it here.

After a lot of searching, I found this tool (A-PDF Rename) which claims to be able to rename PDF files based on metadata. I have never seen or heard of it before. Purchase and download at your own risk.

share|improve this answer

You could try an AutoIT script that would replace the invalid characters in your clipboard.

I don't use AutoIT myself, so I don't know the scripting language, but many people seem to be manipulating the clipboard contents using ClipGet() & ClipPut(value). I didn't see a good way to "monitor" the clipboard, mainly I saw loops that slept for 1 second between running.

I think this is what @Hello71 mean. Hope this point you in the right direction.

share|improve this answer

I've been using this AutoHotkey keyboard shortcut, which works ok, but isn't "automatic":

;------------------------------------------------------------------------------
; 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
share|improve this answer

I do activate this ahk code when needed for that purpose. A ctrl+alt+shift+g (or whatever you chose) will automatically copy and replace the forbidden characters by underscore (or what you want). (You don't really need to fully understand it to customized it).

!^+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
share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .