0

注意:这个问题有点长,只针对有一定批处理经验的人。如果您愿意花一些时间来解决这个问题,分析其中的一些内容,我将非常乐意遵守。

大家好,又是我。这是基于我的最后一个问题“Findstr to a variable w/ File count and subdirectories”。

该程序是“文件搜索器”。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

我希望我已经为你提供了足够的细节。 如果没有,请发表评论,我会为您解决。

4

2 回答 2

2

尝试这个:

目录 "%domap%" /ad /b /s > "tempres.rsm"
echo 目录映射完成
回声 ------------------
回声目录映射
输入“tempres.rsm”
回声 ------------------
标题 SONOROUS FILE SEARCHER: Mapout 完成。

我没有看所有代码。

于 2013-08-03T05:32:29.307 回答
0

问题出在一线

set dirmapout=<tempres.rsm 

SET命令不接受重定向运算符 ( <)。如果您打开命令提示符到所在文件夹tempres.rsm并键入

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

接着

c:\Somedir>set something

你会看到something没有定义。因此,您echo %dirmapout的结果很简单

echo

on a line的结果echo本身就是 的当前设置echo,在这种情况下echo is off是正确的结果。

于 2013-08-03T02:24:16.803 回答