2016-04-13 35 views
1

ファイルを右クリックしてコンテキストコマンドを選択できる設定をしようとしています。私はバットをレジストリに入れ、そのようなものをすべて入れました。私の問題は、私が使用している他のプログラムのコマンドラインがファイル名のスペースと互換性がないため、右クリックしたファイルのスペースを削除したいということです。ファイルの名前を変更するための変数の使用

@echo off 
SET rn="%1" 
ren %rn% % rn: =% 
SET input="%1" 
SET outname="%~d1%~p1%~n1signed.pdf" 
cd "C:\Program Files (x86)\PDFtk Server\bin" 
pdftk %input: =% background Z:\Documents\docsig.pdf output %outname: =% 
pause 

私はバッチ処理で非常に新しいです。たぶん解決策は簡単でしょうか?問題は、バッチが一度に複数のファイルの名前を変更したくないということです。私が見つけたことは、ディレクトリ全体を一度に行います。

@echo off 
setlocal enabledelayedexpansion 
for %%a in (* *) do (
    set file=%%a 
    ren "!file!" "!file: =!" 
) 

上記はそのような例の1つです。右クリックしたファイルを変更するためにこれを微調整する方法はありますか?

ありがとうございます!

+0

ファイル名をコマンドラインで引用符で囲んだ場合、pdftkは機能しませんか? –

+0

[tag:dos]のタグ情報をお読みください - ここには該当しないので注意してください... – aschipfl

+2

また、質問のタイトルに「MS-DOS」を削除する必要があります。 –

答えて

2

解決策は本当に簡単です。短い(8.3)パス名を使用するだけです。短いパス名にはスペースは含まれません。追加ボーナス:ファイルの名前をまったく変更する必要はありません。

次のバッチスクリプトは、%~s1修飾子の使用方法を示すために、ディレクトリ内のすべてのファイルを表示します。あなたは簡単にあなたのニーズに適応させることができます:あなたの最初のスクリプトで

for %%a in (*.*) do (
    @echo %%~sa 
) 

をあなたはファイル名を変更しようとしている2行を削除し、代わりにSET input="%%~s1"を使用することができます。

バッチパラメータ修飾子は、Using batch parametersに記載されています。

+0

短いファイル名は8.3ファイル名の生成が '以前は無効になっていました。私はいつも鉱山を無効にしている。 –

+0

@LưuVĩnhPhúc:8.3ファイル名の作成は、デフォルトで有効になっている。 [8.3ファイル名の作成を無効にする](https://support.microsoft.com/en-us/kb/121007)を行った場合、明らかにこれは機能しません。あなたが私のようで、適切に機能するシステムを気にしているなら、8.3ファイル名の作成をオフにしません。数百万の小さなファイルを作成する最も病理的な使用の場合を除いて、パフォーマンスの改善は無視できるほど小さいです。 – IInspectable

+0

スクリプトを実行するシステム上に8.3の名前があることを確認することはできません。それを有効にしておく理由はまったくありません。私は十年間問題に直面したことはありません。 –

0
@ECHO OFF 
SETLOCAL 
@echo OFF 
:: set rn to name and extension only of param1 
SET "rn=%~nx1" 
:: remove spaces 
SET "rn=%rn: =%" 
:: Note ren syntax - ren "full name" "filenameonly" 
ECHO(ren "%~1" "%rn%" 
:: set inputdir to drive and path from param1 
SET "inputdir=%~dp1" 
:: set outname to name-only of param 1, then string directory,name-sans-spaces+signed.pdf 
SET "outname=%~n1%" 
SET "outname=%~dp1%outname: =%signed.pdf" 
REM cd "C:\Program Files (x86)\PDFtk Server\bin" 
ECHO(pdftk "%inputdir%%rn%" background Z:\Documents\docsig.pdf output "%outname%" 

pause 

必要なRENコマンドは、テストのために単なるECHOです。 コマンドが正しいことを確認したら、ECHO(RENからRENに変更して、実際にファイルの名前を変更します。

は私がコメントアウトしましたディレクトリの変更をそのdirは私のマシン上に存在しないためpdftk

と同じ操作を行います。

ドキュメントはファイル内のコメントです。

構文SET "var=value"(値は空の場合があります)は、後続の空白が割り当てられた値に含まれないようにするために使用されます。 set /aは安全に "quoteless"で使用できます。

関連する問題