窗口%PATH%variables – 如何拆分';' 在CMD shell中再次

我只是检查了似乎是非常有用的,并在Windows XP上工作正常的stackoverflow 。 但是,使用Windows 7,它不起作用的一些晦涩的原因。

PATHvariables看起来像这样

 C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\QuickTime\QTSystem\ 

它显然包含\以及分号,我用它来分批包含这个FOR循环:

  FOR /F "delims=;" %%A IN ("%PATH%") DO ( echo %%A ) 

执行不会导致任何错误,但它只提供一个(第一个)令牌

 C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common 

我不知道为什么FOR终止了,并在networking上提出了几个变化,但没有任何工作。

任何帮助将不胜感激。

基督教

你可以这样做。

 for %%A in ("%path:;=";"%") do ( echo %%~A ) 

( 来源 )

问题的方式是,使用for /F开关, %%A只指定第一个标记。 你必须for /f "tokens=1-9 delims=;" %%A in ("%PATH%") for /f "tokens=1-9 delims=;" %%A in ("%PATH%")并以%%A%%I %%A方式读入。

结合在这个和其他各种stackoverflow页面上学到的东西,OP可以扩展到:

如何确保PATH变量具有唯一的值?

可以这样做,使用数组变量:

 REM usage: call :make_path_unique VARNAME "%VARNAME%" REM 1: splits VARNAME on ';' and builds an array of unique values (case insensitive) REM 2: glues the array back into a single variable REM 3: set the VARNAME to this newly unique-ified collection. REM REM From: various StackOverflow pages: REM http://stackoverflow.com/questions/5471556/pretty-print-windows-path-variable-how-to-split-on-in-cmd-shell REM http://stackoverflow.com/questions/3262287/make-an-environment-variable-survive-endlocal REM http://stackoverflow.com/questions/14879105/windows-path-variable-how-to-split-on-in-cmd-shell-again REM :make_path_unique setlocal EnableDelayedExpansion set VNAME=%~1 set VPATH=%~2 set I=0 for %%A in ("%VPATH:;=";"%") do ( set FOUND=NO for /L %%B in (1,1,!I!) do ( if /I "%%~A"=="!L[%%B]!" set FOUND=YES ) if NO==!FOUND! ( set /A I+=1 set L[!I!]=%%~A ) ) set FINAL=!L[1]! for /L %%n in (2,1,!I!) do ( set FINAL=!FINAL!;!L[%%n]! set L[%%n]= ) for %%P in ("!FINAL!") do ( endlocal set %VNAME%=%%~P ) exit /b 0 

步骤摘要:

  1. for循环分割PATH at';' 并妥善管理报价
    1. for循环查看以前存储的所有路径
    2. 如果这是一个新增加的路径,只扩展数组
  2. 将数组包粘在一起,清理数组变量
  3. 替换路径并清除临时变量
  4. 从功能返回没有错误。

当然,援引:

 set PATH=%PATH%;%MY_PATH_ADDITIONS% call :make_path_unique PATH "%PATH%"