2016-10-08 3 views
0

私は何年もGoogleクロージャコンパイラで次のスクリプトを使用してきました。私はそれを見たことがなかった、それはちょうど働いた - 私はもともとどこからそれを持っていたのか分からず、私は理解していない部分もある。Windows 8バッチファイル:パスが切り捨てられていますか?

ただし、DIR部分のファイルパスは正しく使用されません。代わりに、それは遠く離れたスーパーディレクトリを必要とします。つまり、上記の「dev」ディレクトリがc:\some\long\path\to\devにある場合、%%fc:\some\long\path\to\dev\output\someScript.jsの代わりにc:\some\longが突然使用されます。

DIRパーツを個別に実行すると、完全な完全パスのリストが目的のファイルに完全に戻されます。 cmdからバッチスクリプトを実行すると、ダブルクリックで実行するのと同じエラーが発生します(どちらの方法も前に動作しました)。

スクリプトが最後に実行されてから現在まで、私が知っていることは何も変更していません。これはすべてWindows 8マシン上にあります。

@echo off 
echo compressing files: 
for /f %%f in ('DIR /b /s ..\..\dev\output\*.js') do (
    echo %%~nxf 
    java -jar compiler.jar --charset UTF-8 --js "%%f" --js_output_file "..\..\files\%%~nxf" 

) 
set /p id="Done. Hit enter to close!" 

何が問題なのですか?

+2

追加 ' "delims ="' ' –

+0

/F'後はお客様に@Noodlesに感謝します。 do( 'DIR/b/s .. \ .. \ dev \ output \ * .js ')do('! –

+2

パスの正確なレポートを提供することをお勧めしますあなたの新しいパスは明らかに空白を含み、 'for/f'" tokenises "はデフォルトでスペースを区切り文字として使用し、最初のトークン(すなわちスペースまで)を' metavariabl'に割り当てます(この場合、 '% 'delims ='はデフォルトの区切り文字をオフにするので、行全体が '%% f'に配送され、' %% f'から 'N'ameとe'X'tensionだけが選択されます。 '%%〜nxf'を使用 – Magoo

答えて

0

この答えは正確に@Noodle's answerある - 私は後世のために解答形式にそれを置くしたいと思います:

回答:/f後(アポストロフィを含む!)"delims="を追加します。

結果:delimsについて

@echo off 
echo compressing files: 
for /f "delims=" %%f in ('DIR /b /s ..\..\dev\output\*.js') do (
    echo %%~nxf 
    java -jar compiler.jar --charset UTF-8 --js "%%f" --js_output_file "..\..\files\%%~nxf" 

) 
set /p id="Done. Hit enter to close!" 

https://stackoverflow.com/a/6722085/1598477

0

for /rの方が使いやすいかもしれません。

@echo off 
echo compressing files: 
for /r "..\..\dev\output" %%f in (*.js) do (
    echo %%~nxf 
    java -jar compiler.jar --charset UTF-8 --js "%%f" --js_output_file "..\..\files\%%~nxf" 
) 
set /p id="Done. Hit enter to close!" 

しかし、あなたは確かにfor /fを使用して、麺が提案のように区切り文字としてスペースを削除することができます。

+0

勝利チームを決して変更しないでください;-) - おかげさまで推薦!私はそれらのコマンドの複雑さをすべて知っているわけではないので、私はむしろ私の仕事のためにうまくいく@ noodleの勧告に固執するでしょう。 –

関連する問題