2012-03-29 133 views
0
Setlocal enabledelayedexpansion 
localDirectoryPath=d:/folder/subfolder 
set /p AHFilename=<%fileName% 
set pathname=!localDirectoryPath!\!AHFilename! 
echo pathname=!pathname! 

回顯時的路徑名,輸出爲d:/folder/subfolder /fileName,即子文件夾和/之間存在空格,因此路徑名的路徑變得不可訪問。命令提示符上顯示的錯誤是「d:/ folder/subfolder」不存在。從路徑中刪除空間

請幫忙。如果所述空間被移除,則代碼可以正確運行。

+1

我敢肯定,你在這行的後面加上一個空格結果:'localDirectoryPath = d:/文件夾/ subfolder',只是將其刪除! – Aacini 2012-03-29 23:48:10

回答

1

你確定你沒有這條線後面輸入一個空格:`localDirectoryPath = d:/文件夾/子文件夾

我沒有批知識的人,但沒有你的代碼甚至可以運行?我錯過了%fileName%變量的設置,我想你在第二行之前缺少一個SET調用,你應該用\在「set pathname」行中替換\。我想......應該不是這樣的:?

Setlocal enabledelayedexpansion 
SET localDirectoryPath=d:/folder/subfolder 
set fileName=d:/someFile.txt 
set /p AHFilename=<%fileName% 
set pathname=!localDirectoryPath!\!AHFilename! 
echo pathname=!pathname! 
1

對我的作品好了原樣,只是一對夫婦的錯別字:

  • - 您需要獲得「設置」,使localdirectorypath申報工作。
  • - 您在本地目錄和路徑名中混合反斜線和正斜槓。

    選擇一個。你使用什麼文件系統?

  • - 設置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! 
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 
+1

僅供參考:與消息的核心無關 - 可以在最後創建一個帶有空格的文件。大多數系統管理員需要不時地解決這個問題 - 請參閱http://serverfault.com/questions/225276/batch-file-code-to-find-and-rename-all-files-ending-in-a-space/230958#230958 – RobW 2012-04-03 18:57:17

+0

@RobW - 哇,非常有趣(和討厭)。謝謝(你的)信息。鏈接中重定向路徑開頭的\\?\語法是什麼?我不熟悉它。 – dbenham 2012-04-03 19:30:18

+0

@dbenham檢查了這一點... http://docs.racket-lang.org/reference/windowspaths.html – 2012-12-27 17:59:37