我尝试过这段代码,但是当我尝试运行它时,当我转到该部分时,cmd窗口就会关闭。它应该列出该目录中扩展名为.json的文件。代码可能有问题吗?
:TrackPrevious
cd /D "%USERPROFILE%\Desktop\"
echo.> "%USERPROFILE%\Documents\fileslist.txt"
for %%G IN ('dir /a-d /b /s') do
echo %%~nxg > fileslist.txt
)
for /F "delims=" %%G IN (fileslist.txt) do (
set DeviceList=%%G
)
echo %Devicelist%`
答案 0 :(得分:1)
您的代码中存在许多错误。
echo.> "%USERPROFILE%\Documents\fileslist.txt"
以上fileslist.txt
与批处理文件的其余部分中使用的fileslist.txt
不同,因为它是在不同的目录中创建的。可以从批处理文件中删除此行,因为它不需要。
for %%G IN ('dir /a-d /b /s') do
以上内容在/f
之后for
以及该行末尾的(
丢失了。
echo %%~nxg > fileslist.txt
以上内容为g
而不是G
和>
而不是>>
echo %Devicelist%`
上面有一个尾随`
可能不应该在那里。
它可能也应位于第二个for
循环内,在这种情况下,延迟扩展应与!Devicelist!
一起使用。
我修复了错误(见下文),但仍需要进一步的工作。
目前还不清楚您实际想要实现的目标,而且您的破碎批处理文件与您的问题标题不匹配。
test.cmd:
@echo off
setlocal enabledelayedexpansion
:TrackPrevious
cd /D "%USERPROFILE%\Desktop\"
rem echo.> "%USERPROFILE%\Documents\fileslist.txt"
for /f %%G IN ('dir /a-d /b /s') do (
echo %%~nxG >> fileslist.txt
)
for /F "delims=" %%G IN (fileslist.txt) do (
set DeviceList=%%G
echo !Devicelist!
)
endlocal
答案 1 :(得分:0)
您可以通过设置搜索扩展程序来尝试此解决方案:例如:如果设置如此:
SET "EXT=txt json vbs hta bat url"
因此,您可以动态地将所有具有特定扩展名(txt json vbs hta bat url ...)
的文件名存储在数组变量中,而无需创建filelist.txt,您可以使用Windows资源管理器浏览搜索结果:
@ECHO OFF
Title Scan a folder and store all files names in an array variables
SET "ROOT=%userprofile%\Desktop\"
SET "EXT=txt json vbs hta bat url"
SET "Count=0"
Set "LogFile=%~dp0%~n0.txt"
SETLOCAL enabledelayedexpansion
REM Iterates throw the files on this current folder and its subfolders.
REM And Populate the array with existent files in this folder and its subfolders
For %%a in (%EXT%) Do (
Call :Scanning "*.%%a" & timeout /T 2 /Nobreak>nul
FOR /f "delims=" %%f IN ('dir /b /s "%ROOT%\*.%%a"') DO (
Call :Scanning "%%f"
SET /a "Count+=1"
set "list[!Count!]=%%~nxf"
set "listpath[!Count!]=%%~dpFf"
)
)
::***************************************************************
:Display_Results
cls & color 0B
echo wscript.echo Len("%ROOT%"^) + 20 >"%tmp%\length.vbs"
for /f %%a in ('Cscript /nologo "%tmp%\length.vbs"') do ( set "cols=%%a")
If %cols% LSS 50 set /a cols=%cols% + 15
set /a lines=%Count% + 10
Mode con cols=%cols% lines=%lines%
ECHO **********************************************************
ECHO Folder:"%ROOT%"
ECHO **********************************************************
If Exist "%LogFile%" Del "%LogFile%"
rem Display array elements and save results into the LogFile
for /L %%i in (1,1,%Count%) do (
echo [%%i] : !list[%%i]!
echo [%%i] : !list[%%i]! -- "!listpath[%%i]!" >> "%LogFile%"
)
( ECHO. & ECHO Total of [%EXT%] files(s^) : %Count% file(s^) )>> "%LogFile%"
ECHO(
ECHO Total of [%EXT%] files(s) : %Count% file(s)
echo(
echo Type the number of file did you want to explore ?
set /p "Input="
For /L %%i in (1,1,%Count%) Do (
If "%INPUT%" EQU "%%i" (
Call :Explorer "!listpath[%%i]!"
)
)
Goto:Display_Results
::**************************************************************
:Scanning <file>
mode con cols=75 lines=3
Cls & Color 0E
echo(
echo Scanning for "%~1" ...
goto :eof
::*************************************************************
:Explorer <file>
explorer.exe /e,/select,"%~1"
Goto :EOF
::*************************************************************