我目前正在为我的一个朋友开发一个批处理程序,一旦完成,该程序将成为他们的教程。
我希望程序在 Documents 文件夹中创建一个子目录,在里面创建一个新的 .bat 文件,在新文件中添加几行代码,最后打开新文件。
我知道可以在不知道该计算机的用户名的情况下在文档中创建文件夹/文件,例如C:\User\Thomas\Documents
代码只是绕过该路径,在用户的文档中创建文件/文件夹。我需要在程序中添加哪些代码才能实现这一点?
我也想用批处理代码打开特定的文件夹。
答案1
用户配置文件变量可用于此目的。
有许多“固定”的静态环境变量。
在 cmd.exe 中输入:
SET
您将获得所有当前设置的变量的列表 - 通常是所有固定变量。
默认情况下,Documents 文件夹位于%userprofile%\documents
。
不过,一般来说,最好在程序文件夹中创建相对于程序本身的子文件夹。即使文件夹移动了,其中的所有内容仍与主程序保持相对关系。但是,如果在程序文件夹之外创建的内容被移动,程序将无法再访问它。
为了获得相对文件路径,在主程序中,在调用任何函数之前:
Set Prog_Dir=%~dp0
这将扩展到您的程序所在的目录(文件夹),然后您可以在程序文件夹中创建所需的任何新文件夹/文件。
IE:
IF not exist "%Prog_Dir%resources" MD "%Prog_Dir%resources"
您的子文件夹将始终位于“%Prog_Dir%resources”。
添加:
关于打开特定文件夹,您问的问题不是 100% 清楚,因此我将做出一个假设:
要在 Windows 资源管理器 GUI 中打开文件夹:
start explorer.exe "PATH"
其中路径是您想要打开的文件夹的目录路径。
例如,打开用户的 Documents 文件夹:
start explorer.exe "%userprofile%\documents"
交替,您可以使用命令查看文件夹的内容:
DIR
REM - Will display all folders (Directories) and files in the current working Directory.
输入DIR/?
以cmd.exe
获取完整的选项列表(有很多)。
要仅查看特定目录的文件夹和子文件夹:
TREE
REM - Will display a graphical representation of all Directories and Subdirectories Starting in the Working directory.
REM - A specific Folder to view can be specified using TREE:
TREE %userprofile%\desktop
答案2
我的建议是读取当前用户的路径,而不是获取%userprofile%
,在注册表中。
获取完整/合格的路径UserProfile\Documents
并创建此文件夹:
- 对于 cmd/bat 文件:
@echo off
for /f tokens^=3 %%i in ('reg query "HKCU\Volatile Environment"^|find "USERPROFILE"
')do MkDir "%%i\DOCUMENTS\FOLDER" && pushd "%%i\DOCUMENTS\FOLDER" && dir . && popd
- 对于命令行:
for /f tokens^=3 %i in ('reg query "HKCU\Volatile Environment"^|find "USERPROFILE"')do MD "%i\DOCUMENTS\FOLDER" && pushd "%i\DOCUMENTS\FOLDER" && dir . && popd
- 这是一个创建另一个的 bat 文件
bat
文件new folder
在"~\Documents\"
并保存为:"~\Documents\Folder\New_Bat.cmd"
:
@echo off && setlocal enabledelayedexpansion
cd /d "%~dp0" && cls && title <nul && title ...\%~nx0 && color 0a
for /f tokens^=3 %%i in ('reg query "HKCU\Volatile Environment"^|find "USERPROFILE"
')do 2>nul MD "%%~i\DOCUMENTS\Folder" & pushd "%%~i\DOCUMENTS\Folder" && >.\NewBat.cmd ^
(
echo/ @echo off ^&^& setlocal enabledelayedexpansion
echo/ ^>nul color 9f ^&^& set "_msg=I'm here: "%%~dpnx0""
echo/ set "_pp="c:\windows\system32\pathping.exe" 127.1 -q 01 -p 50 #nul"
set "_esc_for1=for /f ^skip^=^4 %%%%a in ('echo=prompt $h^|cmd')#"
set "_esc_for2=for /f ^eol^=*^delims^= %%%%A in ('cmd/v/u/c echo/%%_msg%%^<nul^|find /v /i "~"')@ "
echo/ !_esc_for1:#=do! !_esc_for2:@=do! %%_pp:#=^>nul%% ^&^& set /p "=-^%%%%a%%%%A" ^<nul
echo/ popd ^& endlocal ^&^& exit /b ^|^| goto :EOF
) && echo/ & if exist .\NewBat.cmd @where .:NewBat.cmd && endlocal && popd && exit /b || goto :EOF
- 这是
NewBat.cmd
在以下新子文件夹中创建~\文件:
@echo off && setlocal enabledelayedexpansion
>nul color 9f && set "_msg=I'm here: "%~dpnx0""
set "_pp="c:\windows\system32\pathping.exe" 127.1 -q 01 -p 50 #nul"
for /f ^skip^=^4 %%a in ('echo=prompt $h^|cmd')do for /f ^eol^=*^delims^= %%A in ('cmd/v/u/c echo/%_msg%^<nul^|find /v /i "~"')do %_pp:#=>nul% && set /p "=-%%a%%A" <nul
popd & endlocal && exit /b || goto :EOF