रजिस्ट्री कमांड कुंजी में कोड डालना


0

मैं इस प्रश्न में क्या करना चाहता हूं, लेकिन मैं इसे निर्देशिका पर एक संदर्भ मेनू में संलग्न करना चाहता हूं ताकि मैं "फ्लैटन फ़ोल्डर" पर राइट-क्लिक कर सकूं और यह मेरे लिए है। यही है, उस फ़ोल्डर के भीतर सभी व्यक्तिगत फ़ाइलों को वर्तमान निर्देशिका तक लाएं, फिर खाली निर्देशिका को हटा दें।

मैं विंडोज 7 में एक फ़ोल्डर को कैसे समतल कर सकता हूं, यह मानते हुए कि सभी फ़ाइल नाम अलग हैं?

मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं? रजिस्ट्री कमांड कुंजी में मुझे मिला है:

 cmd /K "for /f %f in ('dir "%1\*" /s/b/a-d') do if not %~ff"=="%1" move "%f" "%1"
&& for /f %f in ('dir "%1\*" /s/b/ad') do if not "%~ff"=="%1" rd /s/q "%f" pause"

संपादित करें: मेरे पास संदर्भ मेनू विकल्प है, लेकिन जब मैं इसे क्लिक करता हूं तो मुझे यह कहते हुए एक त्रुटि मिलती है कि फ़ोल्डरनाम एप्लिकेशन नहीं मिला है।

अद्यतन मेरा रजिस्ट्री परिवर्तन इस तरह दिखता है: Windows रजिस्ट्री संपादक संस्करण 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Flatten Folder]
@="Flatten Folder"

[HKEY_CLASSES_ROOT\Directory\shell\Flatten Folder\command]
@="cmd /K \"for /f %f in ('dir \"%1\\*\" /s/b/a-d') do if not %~ff\"==\"%1\" move \"%f\" \"%1\""

अभी भी कोई पासा नहीं है, लेकिन कोई त्रुटि भी नहीं है।


@ScottChamberlain -See संपादित करें।
MAW74656

जवाबों:


2

आपकी समस्या यह है कि लाइन को इन के commandमाध्यम से निष्पादित नहीं किया जाता है cmd.exe- इसे एक्सप्लोरर के माध्यम से निष्पादित किया जाता है, जो cmd.exe के अंतर्निहित forकमांड को नहीं समझता है । आपको अपनी स्क्रिप्ट को एक अलग फ़ाइल (जैसे flatten.cmd) में डालनी होगी और उसे चलाना होगा। (ध्यान दें कि आप को बदलना होगा %fकरने के लिए %%fतो।)


1
बाहरी फ़ाइल के बिना ऐसा करने का कोई तरीका? सिर्फ रजिस्ट्री के माध्यम से?
MAW74656

इसकी आवश्यकता क्यों है? /// मैं अभी याद नहीं कर सकता, लेकिन cmd /?मनमाना कमांड लाइन चलाने के लिए दो विकल्पों को सूचीबद्ध करेगा।
grawity

1
नहीं प्रति एक अनुरोध। यह पूरी चीज अपने लिए एक सुविधा है। मैं जल्दी से अपने सभी पीसी पर इस समाधान को तैनात करने में सक्षम होना चाहता हूं, और एक .reg फ़ाइल वास्तव में प्यारी होगी।
MAW74656

2
कोशिश करो cmd /cया cmd /kफिर। (मैं कभी याद नहीं कर सकता कि कौन सा है ...)
प्रचंड

ठीक है, पाया कि, संपादित देखें।
MAW74656

2

मुझे लगता है कि यह विषय कुछ महीने पुराना है, लेकिन यहाँ एक संदर्भ मेनू के संबंध में मेरी आज्ञा है:

स्क्रिप्ट अपने आप में:

(FOR /f "usebackq delims==" %%F IN (`DIR "%1" /a-d/b/s`) DO IF NOT EXIST "%1\%%~nxF" MOVE "%%F" "%1") && (FOR /f "usebackq delims==" %%F IN (`DIR "%1" /ad/b/s ^| SORT /r`) DO RD "%%F")

.REG फ़ाइल के रूप में:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Shell\FlattenFolder]
@="Flatten Folder"

[HKEY_CLASSES_ROOT\Directory\Shell\FlattenFolder\command]
@="CMD.EXE /c (FOR /f \"usebackq delims==\" %%F IN (`DIR \"%1\" /a-d/b/s`) DO IF NOT EXIST \"%1\\%%~nxF\" MOVE \"%%F\" \"%1\") && (FOR /f \"usebackq delims==\" %%F IN (`DIR \"%1\" /ad/b/s ^| SORT /r`) DO RD \"%%F\")"

यह एक परीक्षण और एक विन 7 सेटअप पर काम कर रहा है। सबसे पहले, स्क्रिप्ट रूट निर्देशिका में एक फ़ाइल को स्थानांतरित नहीं करेगी यदि उस नाम के साथ एक फ़ाइल पहले से ही है। दूसरे, स्क्रिप्ट फिर, सभी खाली निर्देशिकाओं को हटा देती है, किसी भी नाम को छोड़ देती है जो नामकरण संघर्ष के कारण खाली नहीं हो सकती है। मेरा मानना ​​है कि @ MAW74656 इस समस्या के कारण मार्ग के स्थानों में रिक्त स्थान था। "usebackq delims=="पतों इस समस्या।

इस कार्यान्वयन का प्लस पक्ष यह है कि यह काम करता है। यह समान-नाम वाली फ़ाइलों को स्पर्श नहीं करता है। जब तक यह खाली नहीं होगा यह एक निर्देशिका नहीं निकालेगा।

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