2013-06-19 11 views
9

क्या कमांड लाइन से विंडोज क्लिपबोर्ड पर फ़ाइल को कॉपी (या कट) करने का कोई तरीका है?कमांड लाइन पर विंडोज़ में क्लिपबोर्ड पर फ़ाइल (सामग्री नहीं) को कॉपी/कट कैसे करें?

विशेष रूप से बैच स्क्रिप्ट के साथ। मुझे पता है कि सामग्री को क्लिपबोर्ड पर कैसे कॉपी करें (type file | clip), लेकिन ऐसा नहीं है। मैं पूरी फाइल रखना चाहता हूं क्योंकि मैं विंडोज एक्सप्लोरर में Ctrl + सी दबा दूंगा।

+0

यहां एक नज़र डालें http://serverfault.com/questions/162273/how-to-send-a-file-into-clipboard-from-command-line-cli – cb0

+1

@ cb0 कृपया [टिप्पणी] देखें (http://serverfault.com/a/162275) आपके द्वारा लिंक किए गए थ्रेड पर। – Endoro

+0

संभावित डुप्लिकेट [क्या प्रोग्राम करने के लिए प्रोग्राम करने के लिए एक विंडोज एपीआई है एक्सप्लोरर के माध्यम से फ़ाइलों को काट/कॉपी/पेस्ट करें?] (Http://stackoverflow.com/questions/9845056/is-there-a-windows-api-to-programmatically-cut -कोपी-पेस्ट-फाइल-थ्रू-एक्सप्लोरर) – Synetech

उत्तर

2

आप Swiss File Knife (SFK) की कोशिश कर सकते हैं:


sfk toclip 
Copy stdin to clipboard as plain text. 

    type test.txt | sfk toclip 
     Copies the content of ASCII file test.txt into the clipboard. 

    sfk list | sfk toclip 
     Copies a file listing of the current dir into the clipboard. 

sfk fromclip [-wait] [-clear] 

Dump plain text content from the clipboard to the terminal. 

    -wait : block until plain text is available. 
    -clear: empty the clipboard after reading it. 

उदाहरण: बैकस्लैश बारी में फ़ॉरवर्ड स्लैश। कल्पना कीजिए कि आप Notepad भीतर निम्न पाठ खुला है:

foo/bar/systems/alpha1.cpp 
foo/bar/systems/alpha2.cpp 
foo/bar/systems/beta1.cpp 

और किसी कारण से आप इस तरह एक प्रारूप में पहली पंक्ति की जरूरत है:

:

foo\bar\systems\alpha1.cpp 

तो फिर तुम इसे इस तरह से कर सकते हैं

  1. SHIFT + CURSOR कुंजी का उपयोग करके पहली पंक्ति को चिह्नित करें।
  2. प्रेस Ctrl +सी या Ctrl +सम्मिलित क्लिपबोर्ड
  3. में कॉपी करने के लिए Windows कमांड लाइन पर, यह कमांड चलाएँ (उदाहरण के लिए, एक बैच फ़ाइल से):

    sfk fromclip +filter -rep x/x\x +toclip 
    
  4. संपादक में वापस, प्रेस Ctrl +वी या शिफ्ट + क्लिपबोर्ड से परिणाम चिपकाएं, डालें।

जैसा कि आप देखते हैं, रेखा "foo \ bar \ system \ alpha1.cpp" में बदल दी गई है।

2

copy और move बैच कमांड हैं जो क्रमशः प्रतिलिपि/पेस्ट और कट/पेस्ट करते हैं। हम फाइलों से निपटने के दौरान पेस्ट या कट इन शर्तों का उपयोग नहीं करते हैं, लेकिन अगर मैं आपको समझता हूं कि फ़ाइल को किसी अन्य स्थान पर कॉपी करने और फ़ाइलों को दूसरे स्थान पर ले जाने की आवश्यकता है।

+1

नहीं, यह फाइल कॉपी करने के बारे में नहीं है (कॉपी, एक्सकॉपी, चाल आदि बहुत बुनियादी हैं)। सिस्टम क्लिपबोर्ड में फ़ाइल को कैसे रखना है, इस बारे में समस्या है। – rostok

+0

ठीक है। मुझे लगता है कि अगर हम फ़ाइल के प्रकार को समझते हैं और इसका उपयोग कैसे किया जा रहा है तो किसी को मदद करने का विचार हो सकता है। – foxidrive

4

यह क्लिपबोर्ड में फ़ाइल के सामग्री को रखेगा (clip.exe द्वारा पूरा किया गया)।

type \path\to\file|clip 

वास्तविक फ़ाइल प्राप्त करने के लिए, तो आप शायद, कुछ अन्य प्रोग्रामिंग भाषा का सहारा लेना VBScript या PowerShell की तरह विंडोज एपीआई का उपयोग करना होगा। जब आप CTRL + C फ़ाइल करते हैं तो मैं पूरी तरह से निश्चित नहीं करता कि एक्सप्लोरर क्लिपबोर्ड में क्या रखता है। मुझे संदेह है कि यह वहां फ़ाइल के पथ को रखने से अधिक बुद्धिमान करने के लिए अधिसूचना प्रणाली का उपयोग करता है। CTRL + V के संदर्भ के आधार पर, आपको कुछ (एक्सप्लोरर, वर्ड) या कुछ भी नहीं मिलेगा (नोटपैड)।

9

ठीक है, ऐसा लगता है सबसे आसान तरीका है एक छोटे से सी # उपकरण है जो क्लिपबोर्ड में तर्क और उन्हें भंडार लेता है बनाने के लिए किया गया था:

using System; 
using System.Windows.Forms; 
using System.Collections.Generic; 
using System.Collections.Specialized; 

namespace File2Clip 
{ 
    public class App 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      List<string> list = new List<string>(); 

      string line; 
      while(!string.IsNullOrEmpty(line = Console.ReadLine())) list.Add(line); 
      foreach (string s in args) list.Add(s); 

      StringCollection paths = new StringCollection(); 
      foreach (string s in list) { 
      Console.Write(s); 
       paths.Add( 
        System.IO.Path.IsPathRooted(s) ? 
         s : 
         System.IO.Directory.GetCurrentDirectory() + 
         @"\" + s); 
      } 
      Clipboard.SetFileDropList(paths); 
     } 
    } 
} 

2017 संपादित करें: यहाँ दोनों स्रोत और बाइनरी के साथ एक github repo है।

+1

धन्यवाद, यह कमाल है और मैं इस तरह से कुछ समय के लिए देख रहा था। बीटीडब्ल्यू मैंने दो दिन बिताए कि क्या मैं इसे महसूस करने से पहले वीबी में कर सकता हूं, मेरे पास पहले से ही 'सी #' कंपाइलर था, सी: \ विंडोज \ माइक्रोसॉफ्ट.NET' –

+1

यदि कोई अन्य उत्तर आपके प्रश्न का उत्तर नहीं देता है, तो आपको स्वीकार करना चाहिए यह उत्तर, भले ही यह आपका है, ताकि हम दूसरों को उत्तर आसानी से पा सकें। – Museful

+0

अच्छा समाधान। मेरे उपयोग के लिए, मैंने इस उपयोगिता को सिस्टम पथ में 'fileclip.exe' के रूप में जोड़ा। पथ से इसका उपयोग करके, मुझे 'System.IO.Path.GetDirectoryName (Environment.GetCommandLineArgs() [0])' 'system.IO.Directory.GetCurrentDirectory()' को काम करने के सापेक्ष पथों के लिए बदलना पड़ा। –

0

आप उपयोग कर सकते हैं कमांड लाइन की प्रतिलिपि फ़ाइल और उपलब्ध उपयोगिताओं यहां पेस्ट करें: http://sbytestream.net/Software/Detail/2

1

मैं हमेशा के लिए इस चाहता था Emacs में उपयोग करने के लिए है, इसलिए, इस सवाल का एक जवाब here, और एनआईएच के एक सुडौल राशि से प्रेरित सिंड्रोम, मैं

https://github.com/roryyorke/picellif

picellif पर एक सी संस्करण उपलब्ध लिखा है भी वाइल्डकार्ड संभालती है (यह rostok के सी # संस्करण करता है या नहीं करता है, तो मेरे लिए स्पष्ट नहीं है)।

+0

मैं इसे एमाक्स और अन्य कमांड लाइन के लिए भी चाहता हूं :) मैं ऊपर रोस्टोक के उत्तर से सी # कोड का उपयोग कर रहा हूं, लेकिन यदि आपके पास विंडोज़ बाइनरी हैं तो मुझे इसका उपयोग करने में खुशी होगी, क्योंकि आपने इसे इमाक्स का उपयोग किया था। –

+0

@MiserableVariable जिथब में विंडोज़ बाइनरी हैं (रिलीज़ टैब के नीचे देखें)। मैं पिछले तीन हफ्तों के लिए बग को ध्यान में रखकर 0.2.0 का उपयोग कर रहा हूं। –

+0

ओह नहीं जानते कि मैं इसे कैसे चूक गया। अब आपके पास एक और उपयोगकर्ता है :) –

संबंधित मुद्दे