2012-07-03 17 views
0

我是新來的CMD下有這個麻煩:如何使用FOR/F命令時,該文件有一個空間

md "C:\kysumicomp" 
for /f "usebackq" %%a in (`CALL DIR /b /s "C:\Program Files" ^| FIND "javac.exe"`) do 
    copy "%%a" "C:\kysumicomp" 
pause 

我所試圖實現的是一個批處理文件,將發現javac.exe文件然後將其複製到C:\ kysumicomp但我不希望它是一個絕對路徑,所以如果我的Java更新批處理仍然工作。

+2

爲什麼這個問題標籤java嗎? –

+1

@TedHopp我懷疑,因爲有一個地方名爲'javac.exe'在腳本文件! :P –

回答

1

嗯......你真正的問題(儘管問題的標題)似乎是:

What I am trying to achieve is a batch file that that will find the javac.exe file then copy it to C:\kysumicomp...

我覺得你過於複雜的事情。

試試這個(指FOR /?的詳細信息,在/R選項):

FOR /R "%ProgramFiles%" %%a IN (.) DO (
    IF EXIST "%%~a\javac.exe" COPY /Y "%%~a" C:\kysumicomp\ 
) 

注意,這將javac.exe所有 occurances複製到目錄中,一個覆蓋其他(有一個問題,你的原來的解決方案也)。如果你想先打後停下來,你需要提前退出循環:

FOR /R "%ProgramFiles%" %%a IN (.) DO (
    IF EXIST "%%~a\javac.exe" (
     COPY "%%~a" C:\kysumicomp\ 
     GOTO END 
    ) 
) 
:END 

最後,一個簡單的解決方案可能會被複制的javac.exe是在你的PATH,只要它是。

FOR %%a IN (javac.exe) DO (
    IF EXISTS "%%~$PATH:a" (
     COPY "%%~$PATH:a" C:\kysumicomp\ 
    ) 
) 

然後,因爲你的問題標題已不匹配,你想達到什麼樣的,我不知道如果你真的需要完全做完全不同的東西。你爲什麼首先將javac.exe複製到你的目錄?

+0

我stilll似乎得到了同樣的錯誤:C:\>複製 「C:\ PROGRAM」 「C:\ kysumicomp」 該系統找不到指定的文件。 – Kysumi

+0

你試過了什麼版本? –

0

這應該做些什麼,你需要在

for /f
@echo off 
md "C:\kysumicomp" 
for /r "C:\Program Files" %%a in (*.*) do (
if %%~nxa==javac.exe (
rem Found it! 
xcopy /h /y "%%a" "C:\kysumicomp" 
exit >nul 
) 
) 
rem Done 
exit >nul 
1

默認的字段分隔符是空格和製表符。爲了解決你的問題,你必須重新定義分隔符。使用delims=時,字符不會出現在路徑中,例如|。還有另一個問題。想象一下有一個目錄c:\Program Files\javac.exe\。您的代碼會將該目錄內的所有文件複製到C:\ kysumicomp。但是,你真的沒有用finddir是不夠的:

md "C:\kysumicomp" 
for /f "delims=| usebackq" %%a in (`dir /b /s "C:\Program Files\javac.exe"`) do (
    copy "%%a" "C:\kysumicomp" 
) 
pause 

基督教的解決方案也是一個不錯的一個,我相信改變的唯一事情就是包括在copy文件名:

FOR /R "%ProgramFiles%" %%a IN (.) DO (
    IF EXIST "%%~a\javac.exe" (
    COPY "%%~a\javac.exe" "C:\kysumicomp" 
    GOTO END 
) 
) 
:END 
相關問題