बैच निर्देशिका नाम बहुत लंबा है


2

इस प्रश्न को इस धागे के उत्तर के रूप में प्रस्तुत किया गया था जहां UAC उन्नयन कोड केFOR साथ बैच में लूप्स चलने से गैर-मौजूद निर्देशिकाओं में शामिल त्रुटियां उत्पन्न होती हैं।

इसका स्क्रीनशॉट इस प्रकार है:

यहां छवि विवरण दर्ज करें

समस्या गलत Localऔर बार-बार Application Dataफ़ोल्डर नामों के सम्मिलन की है । UAC ऊँचाई कोड का उपयोग नहीं करते समय ये त्रुटि संदेश प्रकट नहीं होते हैं।

क्या यह संभव है कि WScript में कुछ करने के लिए गलत वातावरण सेटिंग्स लागू है HOMEPATHपर WshEnvironmentवस्तु? यह XP के उन्नयन के लिए और अधिक से संबंधित हो सकता है (साल पहले) 7 हिमाचल प्रदेश है, जहां किसी कारण से, के भूत विन Documents and Settings, Local Settingsऔर Application Dataदूर नहीं जाना होगा। सीधे शब्दों में जैसे कि आदेश

set LOCALAPPDATA=C:\Users\%username%\AppData\Local
set APPDATA=C:\Users\%username%\AppData\Roaming

कुछ भी नहीं बदलता है। व्यवस्थापक विशेषाधिकार के साथ %LocalAppData%बैच में सही नहीं लगता है। रजिस्ट्री को खोजना वस्तुतः निक्स को उन चीजों के लिए लाता है, जैसे Application Dataस्रोत का निर्धारण किया जाना बाकी है। शायद शेल ऑब्जेक्ट के कुछ अन्य पहलू?

यहां स्क्रिप्ट + कॉपी% पेस्ट है

:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights (thanks to TanisDLJ at Stackoverflow)
:::::::::::::::::::::::::::::::::::::::::
@echo off
color 1E
mode 100,50
VERIFY > nul
CLS
:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\icacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo args = "" >> "%temp%\getadmin.vbs"
    echo For Each strArg in WScript.Arguments >> "%temp%\getadmin.vbs"
    echo args = args ^& strArg ^& " "  >> "%temp%\getadmin.vbs"
    echo Next >> "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", args, "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs" %*
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
Setlocal EnableDelayedExpansion & pushd "%CD%" & CD /D "%~dp0"
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights (thanks to TanisDLJ at Stackoverflow)
:::::::::::::::::::::::::::::::::::::::::
@echo off
color 1E
mode 100,50
VERIFY > nul
CLS
:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\icacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo args = "" >> "%temp%\getadmin.vbs"
    echo For Each strArg in WScript.Arguments >> "%temp%\getadmin.vbs"
    echo args = args ^& strArg ^& " "  >> "%temp%\getadmin.vbs"
    echo Next >> "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", args, "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs" %*
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
Setlocal EnableDelayedExpansion & pushd "%CD%" & CD /D "%~dp0"
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::


Setlocal EnableDelayedExpansion & pushd "%CD%" & CD /D "%~dp0"
set CURRDRIVE=C
FOR /F "usebackq delims==" %%G IN (`dir %CURRDRIVE%:\ /A:D /O:G /S /B ^| FIND /I "myString"`) DO (set "foundMyString=%%~pG")
pause

ध्यान दें कि इस मशीन पर स्पैम UAC कोड नहीं चलने पर प्रदर्शित होता है (सभी "START" से ऊपर) और दोनों मामलों में ठीक काम करता है। एक उन्नत कमांड प्रॉम्प्ट में "%%" के स्थान पर "%" के साथ "START" के नीचे दिए गए कोड को कॉपी करें और अभी भी वही संदेश प्राप्त करें।


2
क्या आप अपने प्रश्न को उस बैच स्क्रिप्ट को शामिल करने के लिए संपादित कर सकते हैं जिसे आप उपयोग कर रहे हैं?
विनायक

क्या मैं सही ढंग से मान रहा हूं कि आप विंडोज 7 मशीन पर इस समस्या का सामना कर रहे हैं?
ट्विस्ट इम्परसिटर

@ विनायक: प्रश्न संपादित किया गया। @ ट्विस्टी: विंडोज़ 7 होम प्रीमियम एक्सपी से अपग्रेड किया गया।
लॉरी स्टर्न

ठीक है, मैं देख लूंगा। FYI करें, स्टैक एक्सचेंज साइटें आपको प्रति टिप्पणी में एक से अधिक लोगों को सूचित करने के लिए @ का उपयोग नहीं करने देती हैं, और @ जीत का पहला उपयोग करती हैं।
ट्विस्टी इंपर्सनेटर

जवाबों:


0

EDIT: टेकनेट फ़ोरम से फ्रेडरिक लॉन्ग का जवाब

समस्या एक पुनरावर्ती जंक्शन बिंदु से जुड़ी हुई है, जिसके परिणामस्वरूप Windows XP से विंडोज 7 में अपग्रेड हो रहा है। निम्नलिखित कमांड चलाने के लिए फिक्स है:

rd "% SYSTEMDRIVE% \ दस्तावेज़ और सेटिंग"

यह किसी भी फाइल को हटाने के बिना जंक्शन बिंदु को हटा देता है।


ऐसा प्रतीत होता है कि आपने अपनी स्क्रिप्ट में दो बार UAC उन्नयन कोड का उपयोग किया है और यह एक निरर्थक है, Setlocal EnableDelayedExpansion & pushd "%CD%" & CD /D "%~dp0"हालांकि मुझे यकीन नहीं है कि आपके पास इसके PUSHDबिना कोई विकल्प क्यों है POPD

इसके अलावा मैं वास्तव में एक समस्या का ज्यादा नहीं देखते हैं। मैंने आपकी स्क्रिप्ट को इसमें शामिल करने के लिए संशोधित किया है, %%~pGजिसके बारे में मुझे लगता है कि मैच पथ ऐसे हैं जिनमें या तो myString या पथ शामिल हैं , जिनके फ़ोल्डर नामों में myString के साथ उप-निर्देशिकाएं हैं ।

मैं बदल गया

For / F "यूज़बैक डेलिम्स ==" %% G IN (`dir% CURRDRIVE%: \ / A: D / O: G / S / B ^ | FIND / I" myString "`) DO (सेट करें - foundMyString =%) % ~ पीजी ")

सेवा

For / F "यूज़बैक डेलिम्स ==" %% G IN (`dir% CURRDRIVE%: \ / A: D / O: G / S / B ^ | FIND / I" Macromedia "`) DO (सेट करें - foundMyString =%) % ~ pG "और गूंज %% ~ pG)

और CURRDRIVEसेट के साथ परिहास को क्रियान्वित किया Cऔर मैं पुनरावृत्ति %LOCALAPPDATA%या %APPDATA%पथ जैसी किसी भी समस्या में नहीं चला । यहाँ मुझे क्या मिला है:

\ उपयोगकर्ता \ विनायक \ AppData \ Local \ मैक्रोमीडिया \
\ उपयोगकर्ता \ विनायक \ AppData \ रोमिंग \
\ उपयोगकर्ता \ विनायक \ AppData \ रोमिंग \ मैक्रोमीडिया \
\ उपयोगकर्ता \ विनायक \ AppData \ रोमिंग \ Macromedia \ फ़्लैश प्लेयर \
\ उपयोगकर्ता \ विनायक \ AppData \ रोमिंग \ Macromedia \ फ़्लैश प्लेयर \
\ उपयोगकर्ता \ विनायक \ AppData \ रोमिंग \ Macromedia \ फ़्लैश प्लेयर \
\ उपयोगकर्ता \ विनायक \ AppData \ रोमिंग \ Macromedia \ फ़्लैश प्लेयर \
\ Users \ Vinayak \ AppData \ Roaming \ Macromedia \ Flash Player \ # सुरक्षा
\ Users \ Vinayak \ AppData \ Roaming \ Macromedia \ Flash Player \ macromedia.com \
\ Users \ Vinayak \ AppData \ Roaming \ Macromedia \ Flash Player \ macromedia.com \ support \
\ Users \ Vinayak \ AppData \ Roaming \ Macromedia \ Flash Player \ macromedia.com \ support \ Flashplayer \
\ Users \ Vinayak \ AppData \ Roaming \ Macromedia \ Flash Player \ www.macromedia.com \
\ Users \ Vinayak \ AppData \ Roaming \ Macromedia \ Flash Player \ www.macromedia.com \ bin \
...

प्रश्न को बाद में संशोधित किया गया था ताकि कोड को एक मानक उन्नत कमांड प्रॉम्प्ट में शामिल किया जा सके, फिर भी समान संदेश प्राप्त करें। एक मिसकॉफ की तरह लग रहा है मेरा अंत। नकल की और अपना कोड चलाया- कोई बदलाव नहीं।
लॉरी स्टर्न

इसका उत्तर यहाँ दिया गया था: " social.technet.microsoft.com/Forums/scriptcenter/en-US/… " "खराब प्रतिनिधि आदि के कारण उत्तर के रूप में पोस्ट नहीं किया जा सकता है
लॉरी स्टर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.