我有以下代码,要求用户填写文件名:
echo Type in your filename (path + filename):
set userinp=
set /p userinp= ^>
我想要什么: 已经'预填充'的完整路径+文件名,然后用户可以编辑。 在大多数情况下,这将是:%cd%+ filename(选择最常见的文件)
Type in your filename (path + filename):
> D:\Download\MyFile.txt
(字符串'D:\ Download \ MyFile.txt'应该是可编辑的)
注意:必须严格按照Windows批处理命令实现;不使用其他语言和/或程序。
答案 0 :(得分:2)
此方法很简单,并且具有可以使用标准命令行导航键的优点,也就是说,除了版本之外,您可以输入文件夹/文件的第一个字母,并使用TAB浏览现有的文件夹/文件键。您甚至可以将"{TAB}"
放入预填充值以自动预填充当前目录中的第一个文件,或者"Dat{TAB}"
作为以" Dat"等开头的第一个文件。
@if (@CodeSection == @Batch) @then
@echo off
echo Type in your filename (path + filename):
cscript //nologo //E:JScript "%~F0" "%cd%\commonFile.ext"
set "userinp="
set /P "userinp=>"
echo Value read: "%userinp%"
goto :EOF
@end
WScript.CreateObject("WScript.Shell").SendKeys(WScript.Arguments(0));
请注意,此处用于执行一行JScript代码的cscript
命令是标准的" DOS"自XP以来所有Windows版本都提供的命令。
编辑:包含第一个文件的路径
您可以将"%cd%\{TAB}"
放入预填充值,以便获取当前文件夹中的第一个文件,包括路径;但是,如果路径包含任何空格,则此方法将失败。下面的新代码修复了这一点,尽管如果在路径中的任何一点存在两个具有相同名称的文件夹,直到第一个空格和所需文件夹不是第一个,它仍然可能会失败。
@if (@CodeSection == @Batch) @then
@echo off
setlocal EnableDelayedExpansion
set "curdir="
for %%a in ("%cd:\=" "%") do (
for /F "tokens=1*" %%b in (%%a) do (
set "curdir=!curdir!\%%b"
if "%%c" neq "" set "curdir=!curdir!{TAB}"
)
)
echo Type in your filename (path + filename):
cscript //nologo //E:JScript "%~F0" "%curdir:~1%\{TAB}"
set "userinp="
set /P "userinp=>"
echo Value read: "%userinp%"
goto :EOF
@end
WScript.CreateObject("WScript.Shell").SendKeys(WScript.Arguments(0));
答案 1 :(得分:0)
Code taken from aGerman on Dostips.com
@echo off &setlocal
call :PredefInput "Type in your filename (path + filename):>" "D:\Download\MyFile.txt" filename
echo Your filename is %filename%
pause
goto :eof
:::::::::: END ::::::::::
:PredefInput ByVal_Message ByVal_Predefined ByRef_VarName
if "%__PRIN__%" neq "__PRIN__" (
setlocal DisableDelayedExpansion
if "%~3"=="" endlocal &exit /b 0
set "M=%~1" &set "S=%~2" &set "N=0" &set "__PRIN__=__PRIN__"
for /f %%i in ('"prompt;$h&for %%i in (1) do rem"') do set "BS=%%i"
setlocal EnableDelayedExpansion
<nul set /p "=.!BS! !BS!!M!!S!"
set "S=A!S!"
for /l %%i in (12,-1,0) do (
set /a "N|=1<<%%i"
for %%j in (!N!) do if "!S:~%%j,1!"=="" set /a "N&=~1<<%%i"
)
for %%i in (!N!) do endlocal &set "N=%%i"
)
set "C="
for /f "delims=" %%i in ('2^>nul xcopy /lw "%~f0" "%~f0"') do if not defined C set "C=%%i"
set "C=%C:~-1%"
setlocal EnableDelayedExpansion
if not defined C (
echo(
if defined S (
for /f delims^=^ eol^= %%i in ("!S!") do endlocal &endlocal &set "%~3=%%i" &exit /b %N%
) else endlocal &endlocal &set "%~3=" &exit /b 0
)
if "!BS!"=="!C!" (
set "C="
if defined S set /a "N -= 1" &set "S=!S:~,-1!" &<nul set /p "=%BS% %BS%"
) else set /a "N += 1" &<nul set /p "=.%BS%!C!"
if not defined S (
endlocal &set "N=%N%" &set "S=%C%"
) else for /f delims^=^ eol^= %%i in ("!S!") do endlocal &set "N=%N%" &set "S=%%i%C%"
goto PredefInput