cmd.exe उद्धृत स्ट्रिंग विस्तार?


0

बैश में उद्धृत स्ट्रिंग विस्तार की सुविधा है , जो आपको विशेष वर्ण भेजने की अनुमति देगा

#!/bin/sh
rtmpdump \
  -r rtmp://freeview.fms.visionip.tv/live \
  -y tvnetwork-hellenictv-sigma-hsslive-25f-4x3-SDh$'\r' \
  -o out.flv

इस मामले में एक शाब्दिक कैरिज रिटर्न पारित किया जा रहा है। सवाल यह है कि आप शाब्दिक कैरिज रिटर्न के साथ भेजने के बारे में कैसे जाएंगे cmd.exe?

जवाबों:


3

विंडोज सीएमडी.ईएक्सई में लाइनफीड या कैरिज रिटर्न जैसे विशेष पात्रों के साथ काम करने के लिए एक अंतर्निहित सुविधा नहीं है। लेकिन ज्ञात हैक हैं जो आपको कुछ अक्सर आवश्यक वर्णों तक पहुंच प्रदान कर सकते हैं।

कैरिज रीटर्न (सीआर) 0x0D

सभी की जरूरत है कि एक फ़ाइल है - किसी भी फ़ाइल। अधिमानतः फ़ाइल छोटी होनी चाहिए ताकि कमांड तेजी से चले। फ़ाइल की सामग्री कोई फर्क नहीं पड़ता। यह खाली भी हो सकता है!

COPY / Z कमांड LF के बिना एक प्रतिशत पूर्णता स्थिति को प्रिंट करता है जो 100% तक पहुंचने तक सीआर के साथ बार-बार होता है। बयान के लिए एक ठीक से गठित सीआर लाइन की शुरुआत से पार्स कर सकता है। फिर आप अपने कथन में फॉर वेरिएबल का उपयोग कर सकते हैं।

D:\test>for /f "delims=1 " %A in ('copy /z test.txt nul') do @echo Good morning %A world!
 world!rning

उपरोक्त में, "दुनिया!" % A चर में निहित CR की वजह से "गुड मॉर्निंग" की शुरुआत लिखते हैं।

सीआर को एक पर्यावरण चर में रखा जा सकता है ताकि बाद में इसका उपयोग किया जा सके, लेकिन विलंबित उपयोग होने पर सीआर को केवल संरक्षित किया जाएगा। विलंबित विस्तार का उपयोग करके सक्षम किया जा सकता है cmd /v:on

D:\test>cmd /v:on
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

D:\test>for /f "delims=1 " %A in ('copy /z test.txt nul') do set "CR=%A"

" \test>set "CR=

D:\test>echo Good morning !CR! world!
 world!rning

D:\test>echo Good morning %CR% world! does not preserve the CR
Good morning  world! does not preserve the CR


लाइनफेड (एलएफ) 0x0A

एक एलएफ को लाइन की निरंतरता का उपयोग करके और बची हुई एलएफ का प्रतिनिधित्व करने के लिए एक खाली लाइन में प्रवेश करके सीधे एक कमांड में शामिल किया जा सकता है, इसके बाद लाइन का शेष भाग।

D:\test>echo hello^
More?
More? world!
hello
world!

एलएफ को आसानी से एक चर में संग्रहित किया जा सकता है जहां इसका बाद में उपयोग किया जा सकता है। आप बस का उपयोग नहीं कर सकते हैं %LF%, लेकिन आप ^%LF%%LF%एक एकल LF का प्रतिनिधित्व करने के लिए उपयोग कर सकते हैं ।

D:\test>set LF=^
More?
More?

D:\test>echo Hello^%LF%%LF%world!
Hello
world!

या विलंबित विस्तार का उपयोग आसानी से एलएफ चर का उपयोग करने के लिए किया जा सकता है

D:\test>cmd /v:on
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

D:\test>echo Hello!LF!world!
Hello
world!

या किसी अन्य चर को परिभाषित किया जा सकता है जिसमें उचित एस्केप अनुक्रम बनाया गया है ताकि चर को सामान्य विस्तार के साथ सीधे इस्तेमाल किया जा सके।

D:\test>set \n=^^^%LF%%LF%^%LF%%LF%

D:\test>echo Hello%\n%world!
Hello
world!


बैकस्पेस (बीएस) 0x08

(BS)(space)(BS)$ H का उपयोग करके प्रॉम्प्ट को सेट किया जा सकता है , और एक BS को एक फॉर लूप का उपयोग करके पार्स किया जा सकता है। बीएस वर्ण को बाद में उपयोग किए जाने वाले पर्यावरण चर में संग्रहीत किया जा सकता है।

D:\test>for /f %A in ('prompt $h^&for %a in (1^) do rem') do @set "BS=%A"

D:\test>echo ab_%BS%cd
abcd

बेहतर समाधान के लिए +1। विलोपन के लिए मेरा अंकन।
निकोल हैमिल्टन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.