2013-02-20 80 views

उत्तर

9

मुझे विंडोज में अंतर्निहित 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 

ध्यान दें कि यह सांत्वना बफर के आकार, और नहीं विंडो के आकार (जो स्क्रॉल है) वापस आ जाएगी।

यदि आप विंडोज कंसोल की ऊंचाई चाहते थे, तो आप Columnsfindstr अभिव्यक्ति 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, कई अलग-अलग खिड़कियों में (एक निष्पादित एफएआर प्रबंधक सहित)।

+0

यदि यह प्रणाली अंग्रेजी की तुलना में किसी अन्य भाषा का उपयोग कर रही है तो यह दृष्टिकोण दुर्घटनाग्रस्त हो जाता है। यदि आप भाषा स्वतंत्रता चाहते हैं तो @ user2475020 के उत्तर को देखें। – SapuSeven

0

आप इसे पर्यावरण चर में नहीं प्राप्त कर सकते हैं, लेकिन यह रजिस्ट्री में संग्रहीत है ताकि आप इसे अपनी बैच स्क्रिप्ट से एक्सेस कर सकें। आप 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 देखें।

+0

कैसे कई शान्ति और कई चौड़ाई के साथ इस काम करता है? मुझे कैसे पता चलेगा कि कौन सी कुंजी मेरे वर्तमान कंसोल पर लागू होती है (जैसा कि केवल नए कंसोल के लिए डिफ़ॉल्ट चौड़ाई के विपरीत है)? –

+0

जब मैं काम करता हूं तो मैं 'hkcu \ console \ windowsize' के लिए तकनीकी आलेख से लिंक करूंगा। साथ ही, मुझे पता है कि मौजूदा विंडो आयाम और बफर आकार को सेट करने का एक शक्ति-आइस तरीका है। मैं देखूंगा कि सेट के बजाए आयाम पढ़ने के लिए मुझे कुछ मिल सकता है या नहीं। – rojo

+0

@rojo: एक पावरहेल विधि का उपयोग करने के लिए जुड़े प्रश्न पर आपके द्वारा पहले से ही एक जवाब है। – Vicky

2

पावरहेल की (Get-Host).UI.RawUI.WindowSize संपत्ति सेट या वर्तमान कंसोल विंडो के आयाम लौटाती है। आप एक for पाश thusly के साथ कब्जा कर सकते हैं:

for /f %%I in ('powershell ^(Get-Host^).UI.RawUI.WindowSize.width') do set width=%%I 
+0

यह मानता है कि पावरहेल स्थापित है हालांकि, जो XP उपयोगकर्ताओं के लिए मामला नहीं हो सकता है। –

+0

+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

+0

@ एक्सेलफ़ोन्टेन - मुझे नहीं लगता कि शुद्ध बैच समाधान है। जानकारी .NET के माध्यम से उजागर की गई है, और जहां तक ​​मुझे पता है, पावरहेल एकमात्र मूल स्क्रिप्टिंग भाषा है जो .NET तक पहुंच सकती है। दुर्भाग्यवश, आप सही हैं, पावरहेल एक एक्सपी मशीन पर उपलब्ध नहीं हो सकता है। – dbenham

0

ठीक है, यहाँ एक है कि 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% 
+0

यह उत्तर .NET स्थापित करने पर निर्भर करता है, और यह जांच नहीं करता कि 'csc.exe' मौजूद नहीं है या नहीं। उस ने कहा, मैं अत्यधिक कोडिंग की मंजूरी देता हूं! बहुत बढ़िया। – icabod

+0

यह काम करता है ... लेकिन यह थोड़ा उलझन में है क्योंकि आपने स्रोत फ़ाइल एक्सटेंशन के लिए '.vb' का उपयोग किया है, लेकिन आपका कोड वास्तव में सी # है। – aphoria

+0

हां, मैंने इसे वीबी में लिखना शुरू कर दिया लेकिन सी # पर स्विच किया। मुझे फ़ाइल एक्सटेंशन को संपादित करने की तरह महसूस नहीं हुआ लेकिन मैं आगे बढ़ूंगा और किसी ने ध्यान दिए जाने के बाद इसे करूँगा। :) – rojo

2

इस (भाषा/स्थानीय/.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 पर परीक्षण किया है, दोनों चेक भाषा में