मैं बैच फ़ाइल के भीतर एक पर्यावरण चर में विंडोज कंसोल के वर्तमान चौड़ाई कैसे प्राप्त कर सकता हूं?पर्यावरण परिवर्तनीय में विंडोज कंसोल चौड़ाई
उत्तर
मुझे विंडोज में अंतर्निहित mode
कमांड का उपयोग करके दृष्टिकोण पसंद है। निम्नलिखित बैच फ़ाइल का प्रयास करें:
@echo off
for /F "usebackq tokens=2* delims=: " %%W in (`mode con ^| findstr Columns`) do set CONSOLE_WIDTH=%%W
echo Console is %CONSOLE_WIDTH% characters wide
ध्यान दें कि यह सांत्वना बफर के आकार, और नहीं विंडो के आकार (जो स्क्रॉल है) वापस आ जाएगी।
यदि आप विंडोज कंसोल की ऊंचाई चाहते थे, तो आप Columns
findstr
अभिव्यक्ति Lines
पर प्रतिस्थापित कर सकते हैं। फिर, यह बफर, नहीं खिड़की की ऊंचाई तो मेरे लिए लाइन्स आमतौर पर 3000 :)
के बारे में रिपोर्ट वापस आ जाएगी ... मैं व्यक्तिगत रूप से इतिहास के माध्यम से वापस स्क्रॉल अनुमति देने के लिए एक बड़ा बफर रखना पसंद करते हैं सिर्फ मनोरंजन के लिए, यहाँ एक संस्करण है कि findstr
का उपयोग नहीं करता उत्पादन फिल्टर करने के लिए ... मामले में (किसी कारण के लिए) है आप findstr
की एक नापसंद है:
@echo off
for /F "usebackq tokens=1,2* delims=: " %%V in (`mode con`) do (
if .%%V==.Columns (
set CONSOLE_WIDTH=%%W
goto done
)
)
:done
echo Console is %CONSOLE_WIDTH% characters wide
ध्यान दें, यह सब Windows XP में मुकदमा चलाया गया एसपी 3, कई अलग-अलग खिड़कियों में (एक निष्पादित एफएआर प्रबंधक सहित)।
आप इसे पर्यावरण चर में नहीं प्राप्त कर सकते हैं, लेकिन यह रजिस्ट्री में संग्रहीत है ताकि आप इसे अपनी बैच स्क्रिप्ट से एक्सेस कर सकें। आप reg.exe QUERY [key details]
बजाय reg.exe ADD [details]
उपयोग कर सकते हैं How to change Screen buffer size in Windows Command Prompt from batch script
इसी प्रकार:
वहाँ जवाब यहां इसे बदलने जा रहे हैं। विवरण के लिए HKCU\Console
के लिए Technet documentation देखें।
कैसे कई शान्ति और कई चौड़ाई के साथ इस काम करता है? मुझे कैसे पता चलेगा कि कौन सी कुंजी मेरे वर्तमान कंसोल पर लागू होती है (जैसा कि केवल नए कंसोल के लिए डिफ़ॉल्ट चौड़ाई के विपरीत है)? –
जब मैं काम करता हूं तो मैं 'hkcu \ console \ windowsize' के लिए तकनीकी आलेख से लिंक करूंगा। साथ ही, मुझे पता है कि मौजूदा विंडो आयाम और बफर आकार को सेट करने का एक शक्ति-आइस तरीका है। मैं देखूंगा कि सेट के बजाए आयाम पढ़ने के लिए मुझे कुछ मिल सकता है या नहीं। – rojo
@rojo: एक पावरहेल विधि का उपयोग करने के लिए जुड़े प्रश्न पर आपके द्वारा पहले से ही एक जवाब है। – Vicky
पावरहेल की (Get-Host).UI.RawUI.WindowSize
संपत्ति सेट या वर्तमान कंसोल विंडो के आयाम लौटाती है। आप एक for
पाश thusly के साथ कब्जा कर सकते हैं:
for /f %%I in ('powershell ^(Get-Host^).UI.RawUI.WindowSize.width') do set width=%%I
यह मानता है कि पावरहेल स्थापित है हालांकि, जो XP उपयोगकर्ताओं के लिए मामला नहीं हो सकता है। –
+1, पावरहेल कमांड 'powerhell (get-host) .ui.rawui के रूप में सरल हो सकता है।windowsize.width'। पृष्ठभूमि जानकारी http://blogs.technet.com/b/heyscriptingguy/archive/2006/12/04/how-can-i-expand-the-width-of-the-windows-powershell-console.aspx पर उपलब्ध है – dbenham
@ एक्सेलफ़ोन्टेन - मुझे नहीं लगता कि शुद्ध बैच समाधान है। जानकारी .NET के माध्यम से उजागर की गई है, और जहां तक मुझे पता है, पावरहेल एकमात्र मूल स्क्रिप्टिंग भाषा है जो .NET तक पहुंच सकती है। दुर्भाग्यवश, आप सही हैं, पावरहेल एक एक्सपी मशीन पर उपलब्ध नहीं हो सकता है। – dbenham
ठीक है, यहाँ एक है कि powershell की आवश्यकता नहीं है स्थापित किया जाना है। यह एक बैच स्क्रिप्ट वैरिएबल सेट करने के लिए .NET अनुप्रयोग को लिखता है, चलाता है और हटा देता है। :)
@echo off
setlocal
pushd "%windir%\microsoft.net\"
for /f "delims=" %%I in ('dir /s /b csc.exe') do (
set csc=%%I
goto next
)
:next
popd
echo using System;>width.cs
echo class Width {>>width.cs
echo public static void Main() {>>width.cs
echo string m1 = "{0}";>>width.cs
echo Console.WriteLine^(m1, Console.WindowWidth^); } }>>width.cs
"%csc%" /out:width.exe width.cs >NUL 2>NUL
for /f %%I in ('width.exe') do set width=%%I
del width.exe width.cs
echo %width%
यह उत्तर .NET स्थापित करने पर निर्भर करता है, और यह जांच नहीं करता कि 'csc.exe' मौजूद नहीं है या नहीं। उस ने कहा, मैं अत्यधिक कोडिंग की मंजूरी देता हूं! बहुत बढ़िया। – icabod
यह काम करता है ... लेकिन यह थोड़ा उलझन में है क्योंकि आपने स्रोत फ़ाइल एक्सटेंशन के लिए '.vb' का उपयोग किया है, लेकिन आपका कोड वास्तव में सी # है। – aphoria
हां, मैंने इसे वीबी में लिखना शुरू कर दिया लेकिन सी # पर स्विच किया। मुझे फ़ाइल एक्सटेंशन को संपादित करने की तरह महसूस नहीं हुआ लेकिन मैं आगे बढ़ूंगा और किसी ने ध्यान दिए जाने के बाद इसे करूँगा। :) – rojo
इस (भाषा/स्थानीय/.net स्वतंत्र) की कोशिश:
@ECHO OFF
SET "ConsoleWidth="
SET /A LINECOUNT=0
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=1,2,*" %%A IN ('mode con') DO (SET /A LINECOUNT=!LINECOUNT!+1&IF !LINECOUNT! EQU 4 SET ConsoleWidth=%%B)
SETLOCAL DISABLEDELAYEDEXPANSION
SET "LINECOUNT="
ECHO ConsoleWidth: %ConsoleWidth% characters
Windows XP और विंडोज 7 पर परीक्षण किया है, दोनों चेक भाषा में
यदि यह प्रणाली अंग्रेजी की तुलना में किसी अन्य भाषा का उपयोग कर रही है तो यह दृष्टिकोण दुर्घटनाग्रस्त हो जाता है। यदि आप भाषा स्वतंत्रता चाहते हैं तो @ user2475020 के उत्तर को देखें। – SapuSeven