我需要知道如何从用户输入的文件中提取目录信息,请将此代码视为示例:
ECHO Drag and drop your .txt file here, after that press Enter:
SET txtfile=
SET /P txtfile=
ECHO.
CD %txtfile%
由于我没有从%txtfile%中提取文件路径,因此无法正常工作
在这里我想要的样本输出:
C:\>Drag and drop your .txt file here, after that press Enter: C:\somefolder\somesubfolder\somefile.txt C:\>Press Enter to continue... C:\somefolder\somesubfolder\>
注意它已经改变了它的工作目录
答案 0 :(得分:2)
您可以按如下方式提取完整路径:
@echo off
setlocal
echo Drag and drop your .txt file here, after that press Enter:
set txtfile=
set /p txtfile=
echo.
for %%i in (%txtfile%) do set txtdir=%%~dpi
for %%i in (%txtfile%) do set txtfil=%%~nxi
cd /d %txtdir%
dir %txtfil%
endlocal
第一个for语句获取驱动器和路径,第二个获取文件名和扩展名。我已经使用cd /d
来更改驱动器和目录,并使用setlocal/endlocal
来保留我在脚本之外的路径(如果您不关心,可以删除它们)。
运行“for /?”可以找到全范围的〜-modifiers在命令窗口中。它确实是一个强大的命令,并且这些修饰符不限于“for”,它们也可以用于任何%1类型的脚本参数。
答案 1 :(得分:1)
ECHO Drag and drop your .txt file here, after that press Enter:
SET txtfile=
SET /P txtfile=
ECHO.
CD %txtfile%\..
我真的不知道为什么,但这在XP中有效,也可以在NT中使用。
答案 2 :(得分:0)
通过采取一个人所说的并修改它来使用这个答案......
paxdiablo是在正确的道路上,但不是复制/粘贴。为了让他正常工作(也许只是为了我运行Windows7),你需要2个文件。
第一个文件:drag_drop.bat
@echo off
echo Drag and drop your .txt file here, after that press Enter:
set txtfile=
set /p txtfile=
echo.%txtfile%
call c:\temp\process_filename.bat %txtfile%
第二个文件:process_filename.bat
FOR %%i in (%txtfile%) do set txtdir=%~dp1
cmd /K "cd %txtdir%"
我必须使用2个文件的原因是因为%~dp1的触发器(paxdiablo的语法错误 - 没有冒犯我知道你有187k代表我给你道具[你有%% ~dpi ,%%在echo中用于禁用特殊字符'%',而dp1是delim,它允许你从文件名中删除引号,filepath - 与%% ~nxi相同的事情))
无论如何,你需要调用批处理文件传递其他文件名。这是第二个进入的地方。这个删除了必要的信息,然后允许您访问该路径,然后在cmd提示符中打开该目录。
<强>替代地强>
您可以从同一个文件中执行此操作...
@echo off
setlocal
IF '%process%'=='1' goto processFile
echo Drag and drop your .txt file here, after that press Enter:
set txtfile=
set /p txtfile=
echo.%txtfile%
set process=1
call c:\temp\dragdrop.bat %txtfile%
:processFile
set txtdir=
FOR %%1 in (%txtfile%) do set txtdir=%~dp1
cmd /K "cd %txtdir%"
endlocal