Windows 使用bat更改路径变量?

Windows 使用bat更改路径变量?,windows,batch-file,cmd,Windows,Batch File,Cmd,我正在尝试编写两个批处理工具,它们包含我的系统变量路径。 第一个批处理文件应在路径前面添加目标,但之前应将旧路径保存在txt文件中,第二个批处理文件应从txt文件加载路径,并用保存的路径替换该路径以再次恢复旧路径 @echo. 2>%date:~0%_PATH.txt @echo %PATH% >> %date:~0%_PATH.txt @echo "This tool will change the system variable PATH" @echo "if you wa

我正在尝试编写两个批处理工具,它们包含我的系统变量路径。 第一个批处理文件应在路径前面添加目标,但之前应将旧路径保存在txt文件中,第二个批处理文件应从txt文件加载路径,并用保存的路径替换该路径以再次恢复旧路径

@echo. 2>%date:~0%_PATH.txt
@echo %PATH% >> %date:~0%_PATH.txt
@echo "This tool will change the system variable PATH"
@echo "if you want to continue, press any key."
@echo "To cancel press CTRL+C"
@pause

@setx /m PATH  "C:\MinGW\bin;%PATH%"
@echo.
@echo.
@echo "The System variables has been set"
@echo "Your original PATH variable was saved to: %date:~0%_PATH.txt"

@pause
这是第一个批处理文件,应该在路径前面添加C:\MinGW\bin。(这并不是说,在我运行批处理文件之后,不仅仅是我的目标

@ECHO OFF
ECHO "You are about to restore your system variable PATH to a previous state!"
ECHO "If you want to preform this step, press any key."
ECHO "To cancel the process, press CTRL+C";
ECHO.
SET index=1

SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%f IN (*.*) DO (
   SET file!index!=%%f
   ECHO !index! - %%f
   SET /A index=!index!+1
)

SETLOCAL DISABLEDELAYEDEXPANSION

SET /p selection="Please select by typing the number which file you want to recover      your PATH:"

SET file%selection% > nul 2>&1

IF ERRORLEVEL 1 (
   ECHO Invalid number selected!!  
   EXIT /B 1
)

CALL :RESOLVE %%file%selection%%%
ECHO Selected file name: %file_name%

GOTO :EOF

:RESOLVE
SET file_name=%1
GOTO :EOF

@setx /m PATH %file_name%
这是还原批处理文件,它不会选择我的choosen文件

我希望任何人都能帮助我。
谢谢

SETX
仅更改注册表中的值,而不是当前shell环境中的变量。正如运行
SETX/?
时文档所述:

NOTE: 1) SETX writes variables to the master environment in the registry.
      2) On a local system, variables created or modified by this tool
         will be available in future command windows but not in the
         current CMD.exe command window.

如果您只想在当前环境中修改PATH的值,只需使用常规的
SET
命令。如果您想同时使用这两个命令,那么您需要同时使用这两个命令。

您想在注册表中设置变量的原因是什么?这会使它以某种方式保持不变吗?是的,这就是环境变量无法使用的地方继承人的初始值。