Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何";cd";一步一步进入文本文件中的所有文件夹?_Batch File_Cmd - Fatal编程技术网

Batch file 如何";cd";一步一步进入文本文件中的所有文件夹?

Batch file 如何";cd";一步一步进入文本文件中的所有文件夹?,batch-file,cmd,Batch File,Cmd,更新 以下是我的完整代码: cd "C:\Users" DIR /A:D /S /B > "%appdata%\folder_overview.txt" type "%appdata%\folder_overview.txt" | findstr /v AppData | findstr /v All.Users | findstr /v Public >> "%appdata%\newfolder.txt" move "%appdata%\newfolder.txt"

更新

以下是我的完整代码:

cd "C:\Users"

DIR /A:D /S /B > "%appdata%\folder_overview.txt" 

type "%appdata%\folder_overview.txt" | findstr /v AppData | findstr /v All.Users | findstr /v Public >> "%appdata%\newfolder.txt"
move "%appdata%\newfolder.txt" "%appdata%\folder_overview.txt"

:repeatuntilfilesizezero
set LINES=0
for /f "delims==" %%I in (%appdata%\folder_overview.txt) do (
    set /a LINES=LINES+1
)

set /a LINES=LINES-1
more +%LINES% < "%appdata%\folder_overview.txt" >> "%appdata%\last_folder.txt"

Setlocal EnableDelayedExpansion
set content=
for /f "delims=" %%i in (%appdata%\last_folder.txt) do set content=!content! %%i

pause

cd %content%

type "%appdata%\folder_overview.txt" | findstr /v "%content%" >> "%appdata%\newfolder.txt"
move "%appdata%\newfolder.txt" "%appdata%\folder_overview.txt"

DEL "%appdata%\last_folder.txt"

FOR %%S IN (%appdata%\folder_overview.txt) DO set size=%%~zS

echo %size%
IF %size% gtr 0 echo goto :repeatuntilfilesizezero
IF %size% equ 0 echo "null"

pause
cd“C:\Users”
目录/A:D/S/B>%appdata%\folder\u overview.txt
键入“%appdata%\folder\u overview.txt”| findstr/v appdata | findstr/v All.Users | findstr/v Public>>%appdata%\newfolder.txt
移动“%appdata%\newfolder.txt”%appdata%\folder\u overview.txt“
:repeatuntilfilesizezero
设置行数=0
对于(%appdata%\folder\u overview.txt)中的/f“delims==”%%I,请执行以下操作(
设置/a行=行+1
)
设置/a行=行-1
更多+%LINES%<%appdata%\folder\u overview.txt“>>%appdata%\last\u folder.txt”
Setlocal EnableDelayedExpansion
设置内容=
对于(%appdata%\last\u folder.txt)中的/f“delims=“%%i”,请设置内容=!内容!%%我
暂停
cd%含量%
键入“%appdata%\folder\u overview.txt”| findstr/v“%content%”>>“%appdata%\newfolder.txt”
移动“%appdata%\newfolder.txt”%appdata%\folder\u overview.txt“
删除“%appdata%\last\u folder.txt”
对于(%appdata%\folder\u overview.txt)中的%%S,请设置大小=%%~zS
回显%size%
如果%size%gtr 0回声转到:repeatuntilfilesizezero
如果%size%eq 0回显“null”
暂停
我注意到最后一行是空行是完全值得的。 我只想要以下几点:

  • 列出所有文件夹
  • “cd”到“folder_overview.txt”中的最后一个文件夹,并从文件中删除最后一行
  • 检查“folder_overview.txt”是否为空 ->如果不是空的,只需转到标签“:repeatuntilfilesizezero” ->如果为空,则转到退出
最后,在“folder_overview.txt”中的所有文件夹中一步一步地“cd”

目前,“goto:repeatuntilfilesizezero”不起作用。它不会跳转到标签


Hannir

要检索文本文件中非空的最后一行,不需要计算行数,只需使用
more
跳过一行即可。只需将
for/F
循环与变量赋值一起使用,这样变量最后保留最后一行:

> "%APPDATA%\last_folder.txt" (
    for /F usebackq^ delims^=^ eol^= %%L in ("%APPDATA%\folder_overview.txt") do (
        set "LINE=%%L"
    )
    setlocal EnableDelayedExpansion
    echo(!LINE!
    endlocal
)
这里使用延迟变量扩展来避免最后一行中的一些特殊字符出现问题,如
^
&


如果文件不包含重复的行,可以使用以下代码删除最后一行:

> "%APPDATA%\folder_overwiew.txt" findstr /L /X /V /G:"%APPDATA%\last_folder.txt" "%APPDATA%\folder_overwiew.txt"
如果文件可能包含重复项,则可以使用以下代码段:

set "LINE="
> "%APPDATA%\folder_overwiew.txt" (
    for /F usebackq^ delims^=^ eol^= %%L in ("%APPDATA%\folder_overview.txt") do (
        setlocal EnableDelayedExpansion
        if defined LINE echo(!LINE!
        endlocal
        set "LINE=%%L"
    )
)

我无法检测到您想做什么,但当您
cd
进入每个目录时,我假设您想在树中的每个文件夹中做一些事情:

@echo off
cd /d "c:\users"
for /f %%i in (' dir /s /b /ad ^|findstr /v "AppData All.Users Public" ') do (
  pushd "%%i"
    echo now working in: %%i
    echo   doing something here in %%~ni
  popd
)

你想要最后一条非空行吗?为什么计数?只需使用
for/F%%L
loop over
folder_overview.txt
并在其正文中设置“LINE=%%L”,因此
LINE
在每次迭代中都会被覆盖,并最终包含最后一行(请记住
for/F
会自己跳过空行)。。。如果
folder_overview.txt
不包含重复的行,则可以使用
findstr/L/V/X/C
删除最后一行…对于命令
set content=%content%%%i
,需要启用延迟扩展,因为它处于循环中,因此必须读取
set content=!内容!%%我
…我会尝试一下,然后回复。谢谢你的快速回答!为什么
echo goto:label
不转到label?嗯……如果
DIR/A:D/S/B
给出了重复的,你就麻烦了,我想:DThanks alot@aschipfl:]可以跳过一些文件夹吗?我想跳过“findstr/v AppData | findstr/v All.Users | findstr/v Public”文件夹。顺便说一句,这正是我要找的工作。我真的很感谢你的代码!非常感谢@Stephan!