2013-08-03 57 views
0

注意:此問題有點長,只適用於具有批次體驗的人。如果你願意在這個問題上花點時間,分析一下這個和這個問題,我會很樂意遵守。目錄映射不起作用(BATCH)

你好傢伙,這是我的一次。這是基於我最後一個問題「Findstr變量W /文件數量和子目錄」。

該程序是「文件搜索器」。 DIR命令將輸出到TEXT文件中,並且FINDSTR命令將查找與您的搜索詞匹配的特定字符串。如果是這樣,就像找到一個文件。截至目前,一切都處於完美的工作狀態。代碼尚未完成,但目錄「map-out」(文本文件的目錄)的顯示不起作用。

這是代碼。 (更多文字在代碼下面)

@echo off 
if NOT exist temporary goto make 
:cont 
set odir=%dir% 
cd temporary\cache 
if NOT exist partitionmapout.rsm goto partitionmapoutreq 
goto cont2 
:partitionmapoutreq 
echo Note: 
echo Would you like to Map out your whole C:\ Partition? This makes the program map out every single file in your C:\ Drive. 
echo This can take from a few seconds to a few minutes (Depends on how much stuff you store in your drive) 
set /p parch="Y/N: " 
if %parch% == Y goto partitionmapout 
title SONOROUS FILE SEARCHER (Copyright 2013 by Sonorous) 
:cont2 
cd temporary 
set odir=%dir% 
set /p cdir="DIRECTORY: " 
set domap=%cdir% 
title SONOROUS FILE SEARCHER: Mapping out... 
echo PLEASE WAIT, MAPPING OUT DIRECTORY. 
dir %domap% /a-d /b /s > "tempres.rsm" 
echo Directory Mapout done 
echo ----------------------------- 
echo  DIRECTORY MAPOUT 
set dirmapout=<tempres.rsm 
echo %dirmapout% 
echo ----------------------------- 
title SONOROUS FILE SEARCHER: Mapout done. 
set /p "searchinput=Search Term: " 
title SONOROUS FILE SEARCHER (Copyright 2013 by Sonorous) 
for /f "delims=" %%a in ('findstr /i /L /c:"%searchinput%" "tempres.rsm" ') do set "found=%%a" 
set proin=%found% 
echo "%found%" 
cd temporary 
del "tempres.rsm" 
echo Would you like to open the program or just leave it alone? (Y/N) 
echo WE CANNOT OPEN PROGRAMS W/ NO SPACES ON THEIR NAME. 
set /p oc="" 
if %oc% == Y goto openpro 
pause 
cls 
echo THANK YOU FOR USING OUR PROGRAM. 
echo CLOSING IN 5 SECONDS 
timeout /t 1 >nul 
cls 
echo THANK YOU FOR USING OUR PROGRAM. 
echo CLOSING IN 4 SECONDS 
timeout /t 1 >nul 
cls 
echo THANK YOU FOR USING OUR PROGRAM. 
echo CLOSING IN 3 SECONDS 
timeout /t 1 >nul 
cls 
echo THANK YOU FOR USING OUR PROGRAM. 
echo CLOSING IN 2 SECONDS 
timeout /t 1 >nul 
cls 
echo THANK YOU FOR USING OUR PROGRAM. 
echo CLOSING IN 1 SECONDS 
timeout /t 1 >nul 
cls 
exit 

:openpro 
echo NOTE: WE DO NOT KNOW THE PROGRAM'S FILE DIRECTORY, SO WE WILL START THE PROGRAM 
echo THRU THE FILE DIRECTORY YOU INPUTTED. 
pause 
start %proin% 
exit 

:make 
echo Temporary Folder (Where the program stores temporary files) 
echo Does not exist. Creating... 
md temporary 
cd temporary 
md cache 
cd %odir% 
echo Complete. 
goto cont 

:partitionmapout 
title Partition Map out... 
echo Mapping out... 
echo DO NOT CLOSE THE PROGRAM WHILE IT IS MAPPING OUT OR ELSE IT WILL FATALLY CRASH NEXT TIME YOU OPEN IT 
echo The partition map-out is not done. Wait for a few minutes. 
dir C:\ /a-d /b /s > "tempres.rsm" 
echo The partition map-out is complete. 
goto cont 

代碼的指定區域不起作用的是這個;

cd temporary 
    set odir=%dir% 
    set /p cdir="DIRECTORY: " 
    set domap=%cdir% 
    title SONOROUS FILE SEARCHER: Mapping out... 
    echo PLEASE WAIT, MAPPING OUT DIRECTORY. 
    dir %domap% /a-d /b /s > "tempres.rsm" 
    echo Directory Mapout done 
    echo ----------------------------- 
    echo  DIRECTORY MAPOUT 
    set dirmapout=<tempres.rsm 
    echo %dirmapout% 
    echo ----------------------------- 
    title SONOROUS FILE SEARCHER: Mapout done. 

的「DIR」命令完成映射出指定的目錄。另一個命令將dir命令的輸出複製到變量。該變量已被設置爲顯示在「DIRECTORY MAPOUT」部分。然而,它說

ECHO IS OFF 

的「tempres.rsm」(其中的目錄mapout存儲的文件)是在「臨時」目錄(如不工作代碼EG的第一行看到的。「CD臨時) 沒有其他的「CD」命令,所以它是有保證的,它仍然是在同一目錄下。

但是當一個變量被設置爲從「tempres.rsm」搶數據,而不是數據,是

ECHO IS OFF 

我希望我已經爲您提供了所有足夠的細節。 如果沒有,請發表評論,我會爲你排序。

+0

我已經發布了一個答案,但將來請將您的代碼限制在與您要求的內容相關的部分,然後*詢問具體問題*。 「目錄映射不起作用」不是一個問題,並且不得不通過幾十行代碼和文本來發現你實際上沒有詢問任何東西有點令人討厭。 :-)在這種情況下,代碼的相關部分只是您標記爲「特定區域」的最後一個塊 - 其餘部分只是混亂。 –

回答

2

試試這個:

我沒看所有代碼。

+0

看起來合法。 :D IT WORKS!真棒!謝謝! –

0

的問題是在該行

set dirmapout=<tempres.rsm 

SET命令不接受重定向操作符(<)。如果你打開一個命令提示符到tempres.rsm所在的文件夾,然後鍵入

C:\Somedir>set something=<tempres.rsm 

然後

c:\Somedir>set something 

你會看到something沒有定義。因此,您的echo %dirmapout是導致根本

echo 

上本身就是一個線echo結果是echo當前設置,在這種情況下echo is off是正確的結果。

+0

糾正這個問題的方法是用'^'來跳過''''。這是使用'設置dirmapout =^ shf301

+0

@ shf301:這導致'dirmapout =

+1

從文本文件中設置變量,使用'set/p dirmapout = Stephan