2016-09-23 2 views
0

Kann man Umleitungsbefehle in einer Variablen speichern? Etwas in diesen Zeilen:Umleitungsanweisungen in Variable verschieben?

set redirect=>> buildlog.txt 2>&1 

nmake -f Makefile %redirect% 

So funktioniert das nicht.

+0

würden Sie haben die var Zuordnung in Anführungszeichen gesetzt, weil sonst die Umleitung auf die 'Set' Befehl angewendet wird, isntead der Zeichen '2', '>', etc ... immer zugewiesen als Text zur Variable. –

+0

@MarcB Können Sie ein funktionierendes Beispiel bereitstellen? Ich habe versucht, mit Anführungszeichen, aber es funktioniert auch nicht ... –

+0

Ich verstehe nicht ganz, was Sie in Ihrer Buildlog.txt-Datei wollen. Möchten Sie, dass Buildlog.txt ** set redirect = ** enthält? – Squashman

Antwort

2

Da > Shell-Metazeichen sind, können Sie sie nicht direkt verwenden, um einer Variablen einen Text zuzuweisen. Sie werden von der Shell ausgeführt und ihr RESULT wird zugewiesen. So müssen Sie zitieren/entkommen ihnen:

set redirect=^>^>buildlog.txt 2^>^&1 
      ^-^--etc... cmd uses^to escape. 

die dann wie erwartet funktioniert:

C:\temp\z>set foo=^>^>log.txt 
C:\temp\z>dir %foo% 
C:\temp\z>dir 
Volume in drive C is Windows7_OS 
Volume Serial Number is 0E31-0E35 

Directory of C:\temp\z 

09/23/2016 10:32 AM <DIR>   . 
09/23/2016 10:32 AM <DIR>   .. 
09/23/2016 10:32 AM    333 log.txt 
       1 File(s)   333 bytes 
       2 Dir(s) 274,917,388,288 bytes free 

C:\temp\z>type log.txt 
Volume in drive C is Windows7_OS 
Volume Serial Number is 0E31-0E35 

Directory of C:\temp\z 

09/23/2016 10:32 AM <DIR>   . 
09/23/2016 10:32 AM <DIR>   .. 
09/23/2016 10:32 AM     0 log.txt 
       1 File(s)    0 bytes 
       2 Dir(s) 274,917,388,288 bytes free 
+0

Perfekt, danke! –

+1

'set" redirect = >> buildlog.txt 2> & 1 "' (Zitat vermeidet Fluchtgefahr ...) – aschipfl

0

Alles, was Sie wirklich tun müssen, um den Einsatz verzögert Expansion.

@echo off 
set "redirect=>> buildlog.txt 2>&1" 

setlocal enabledelayedexpansion 
nmake -f Makefile !redirect! 
endlocal 
+0

Das ist eine andere Lösung, danke! –

+0

Nein, das funktioniert nicht. Sobald Sie das '>' und '&' in der Variablen richtig gelesen haben, müssen Sie '% redirect%' verwenden, wenn die Umleitung funktionieren soll. – dbenham

Verwandte Themen