Setlocal enabledelayedexpansion
localDirectoryPath=d:/folder/subfolder
set /p AHFilename=<%fileName%
set pathname=!localDirectoryPath!\!AHFilename!
echo pathname=!pathname!
回显时的路径名,输出为d:/folder/subfolder /fileName
,即子文件夹和/之间有空格,因此路径名的路径变得不可访问。命令提示符下显示的错误是“d:/ folder / subfolder”不存在。
请帮忙。如果删除了所述空格,则代码可以正确运行。
答案 0 :(得分:1)
你确定在这一行之后没有空格:`localDirectoryPath = d:/ folder / subfolder
我没有批处理知识,但你的代码是否运行?我错过了%fileName%变量的设置,我认为你在第二行前面缺少一个SET调用,你应该在&#34; set pathname&#中用/替换\ 34;线。我想......难道不应该是这样的:?
Setlocal enabledelayedexpansion
SET localDirectoryPath=d:/folder/subfolder
set fileName=d:/someFile.txt
set /p AHFilename=<%fileName%
set pathname=!localDirectoryPath!\!AHFilename!
echo pathname=!pathname!
答案 1 :(得分:1)
除了偶然的拼写错误之外,我的工作原理正常:
- 您在localdirectory和pathname中混合了反斜杠和正斜杠。
选择一个。您使用的文件系统是什么?
- 设置AHFilename时使用重定向将为您提供混合结果。
在Windows XP设备上为我工作的更正代码:
Setlocal enabledelayedexpansion
set localDirectoryPath=c:\folder\subfolder
set /p AHFilename=%fileName%
set pathname=!localDirectoryPath!\!AHFilename!
echo pathname=!pathname!
如果这仍然不适合您,您可以使用引号封装变量和数据:
set "localDirectoryPath=c:\folder\subfolder"
如果仍然无效,您可以在使用它的位置从localdirectorypath数据中删除最终字符:
set pathname=!localDirectoryPath:~0,-1!\!AHFilename!
echo pathname=!pathname!
答案 2 :(得分:1)
正如其他人所指出的那样,您发布的代码无法运行。它当然不能在subfolder
和\
之间引入空格。
但是,如果你的变量在文件夹和/或文件名的末尾有不需要的空格,那么很容易摆脱它们。
Windows不允许文件或文件夹名称的最后一个字符为点或空格 - 如果您尝试创建它,Windows将从名称中删除尾随点和空格。但像DIR这样的命令不会忽略尾随空格。
D:\>mkdir "my folder "
D:\>dir "my folder "
Volume in drive D has no label.
Volume Serial Number is F8FD-5039
Directory of D:\my folder
File Not Found
D:\>dir "my folder"
Volume in drive D has no label.
Volume Serial Number is F8FD-5039
Directory of D:\my folder
03/29/2012 06:00 PM <DIR> .
03/29/2012 06:00 PM <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 67,054,551,040 bytes free
您可以使用参数或FOR变量修饰符从路径名中修剪错误的尾随点或空格。修饰符将名称转换为标准格式,包括从路径中的每个文件夹名称中删除尾随点和/或空格。
@echo off
set "myVar=my folder "
echo this will fail because of space at end of path
dir "%myVar%"
echo(
echo The ~f modifier strips the trailing space
for %%F in ("%myVar%") do dir "%%~fF"
以下是上述脚本的结果
this will fail because of space at end of path
Volume in drive D has no label.
Volume Serial Number is F8FD-5039
Directory of D:\my folder
File Not Found
The ~f modifier strips the trailing space
Volume in drive D has no label.
Volume Serial Number is F8FD-5039
Directory of D:\my folder
03/29/2012 06:00 PM <DIR> .
03/29/2012 06:00 PM <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 67,054,551,040 bytes free