[NT Batch]如何从用户输入的文件中获取目录?

时间:2009-05-25 08:44:20

标签: batch-file

我需要知道如何从用户输入的文件中提取目录信息,请将此代码视为示例:


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\>

注意它已经改变了它的工作目录

3 个答案:

答案 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