2008-08-29 9 views
3

Ich möchte einen DOS-Dateinamen entkommen, so dass ich es mit sed verwenden kann. Ich habe eine DOS-Batch-Datei etwas wie folgt aus:DOS-Dateinamen für die Verwendung mit * Nix-Befehle

set FILENAME=%~f1 

sed 's/Some Pattern/%FILENAME%/' inputfile 

(Hinweis: %~f1 - erweitert %1 zu einem vollständigen Pfadnamen - C:\utils\MyFile.txt)

ich, dass die Schrägstriche in %FILENAME% gefunden werden nur den nächsten Buchstaben zu entkommen .

Wie kann ich sie verdoppeln, damit sie ausgeblendet werden?

(I Cygwin installiert haben, so fühlen sich frei, alle anderen * nix-Befehle zu verwenden)

Lösung

Kombination Jeremy und Alexandru Nedelcu Vorschläge und die Verwendung | für das Trennzeichen in der sed Befehl habe ich

set FILENAME=%~f1 
cygpath "s|Some Pattern|%FILENAME%|" >sedcmd.tmp 
sed -f sedcmd.tmp inputfile 
del /q sedcmd.tmp 

Antwort

2

Dies wird funktionieren. Es ist chaotisch, weil man in BAT-Dateien nicht set var = `cmd 'verwenden kann, wie man es in Unix kann. Die Tatsache, dass Echo Zitate nicht versteht, ist ebenfalls unordentlich und könnte zu Problemen führen, wenn Some Pattern Shell-Metazeichen enthält.

set FILENAME=%~f1 
echo s/Some Pattern/%FILENAME%/ | sed -e "s/\\/\\\\/g" >sedcmd.tmp 
sed -f sedcmd.tmp inputfile 
del /q sedcmd.tmp 

[Bearbeitet]: Ich bin überrascht, dass es für Sie nicht funktioniert hat. Ich habe es gerade getestet, und es hat auf meiner Maschine funktioniert. Ich verwende sed von http://sourceforge.net/projects/unxutils und benutze cmd.exe, um diese Befehle in einer bat-Datei auszuführen.

2

Sie könnten als Alternative versuchen (von der Eingabeaufforderung) ...

> cygpath -m c:\some\path 
c:/some/path 

Wie Sie sich vorstellen können, wandelt es Schrägstriche zu Schrägstriche.

0

@Alexandru & Jeremy, Danke für Ihre Hilfe. Sie beide bekommen upvotes

@ Jeremy

Mit Ihrer Methode ich folgende Fehlermeldung bekam:

sed: -e expression #1, char 8: unterminated `s' command

Wenn Sie Ihre Antwort bearbeiten können, um es ich es akzeptieren machen arbeiten würde. (Einfügen meiner Lösung zählt nicht)

Update: Ok, ich habe es mit UnixUtils versucht und es hat funktioniert. (Die von mir heruntergeladenen UnixUtils stammen vom 1. März 2007 und verwenden GNU sed Version 3.02. Meine Cygwin-Installation hat GNU sed Version 4.1.5)

Verwandte Themen